swift中对与delegate的使用

swift中对与delegate的使用

为了保证delegate使用后不会导致内存溢出,可以做如下两种方式:

1、protocol声明时不指出base class:

protocol ZXSegmentControlDelegate {
    func didSelect(index:NSInteger)
}

使用时就需要手动将delegate置为nil

self.segmentCtl?.delegate = nil

2、protocol声明时指出base class:

protocol ZXSegmentControlDelegate: UIViewController {
    func didSelect(index:NSInteger)
}

class ZXSegmentControl: UIView {
    weak var delegate:ZXSegmentControlDelegate?

}

Apple watch开发时无法被Xcode识别的情况处理

Apple watch开发时无法被Xcode识别的情况处理

一、现象

能看到apple watch,但在Xcode的设备列表中显示为unknown

二、处理

1、删除目录:~/Library/Developer/Xcode/watchOS DeviceSupport

2、clean Xcode

3、restart macOS

小记:

之前查了很多方法,重新匹配了很多次不好使,但是没有尝试重启系统。第二天来上班启动系统才发现好了。。。

隐私策略

本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本应用服务使用协议不可分割的一部分。

适用范围

(a) 在您注册本应用帐号时,您根据本应用要求提供的个人注册信息;

(b) 在您使用本应用网络服务,或访问本应用平台网页时,本应用自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;

(c) 本应用通过合法途径从商业伙伴处取得的用户个人数据。

您了解并同意,以下信息不适用本隐私权政策:

(a) 您在使用本应用平台提供的搜索服务时输入的关键字信息;

(b) 本应用收集到的您在本应用发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;

(c) 违反法律规定或违反本应用规则行为及本应用已对您采取的措施。

信息使用

(a)本应用不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先得到您的许可,或该第三方和本应用(含本应用关联公司)单独或共同为您提供服务,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。

(b) 本应用亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本应用平台用户如从事上述活动,一经发现,本应用有权立即终止与该用户的服务协议。

(c) 为服务用户的目的,本应用可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息,或者与本应用合作伙伴共享信息以便他们向您发送有关其产品和服务的信息(后者需要您的事先同意)。

信息披露

在如下情况下,本应用将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息:

(a) 经您事先同意,向第三方披露;

(b)为提供您所要求的产品和服务,而必须和第三方分享您的个人信息;

(c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露;

(d) 如您出现违反中国有关法律、法规或者本应用服务协议或相关规则的情况,需要向第三方披露;

(e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷;

(f) 在本应用平台上创建的某一交易中,如交易任何一方履行或部分履行了交易义务并提出信息披露请求的,本应用有权决定向该用户提供其交易对方的联络方式等必要信息,以促成交易的完成或纠纷的解决。

(g) 其它本应用根据法律、法规或者网站政策认为合适的披露。

信息存储和交换

本应用收集的有关您的信息和资料将保存在本应用及(或)其关联公司的服务器上,这些信息和资料可能传送至您所在国家、地区或本应用收集信息和资料所在地的境外并在境外被访问、存储和展示。

Cookie的使用

(a) 在您未拒绝接受cookies的情况下,本应用会在您的计算机上设定或取用cookies ,以便您能登录或使用依赖于cookies的本应用平台服务或功能。本应用使用cookies可为您提供更加周到的个性化服务,包括推广服务。

(b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies,则您可能无法登录或使用依赖于cookies的本应用网络服务或功能。

(c) 通过本应用所设cookies所取得的有关信息,将适用本政策。

信息安全

(a) 本应用帐号均有安全保护功能,请妥善保管您的用户名及密码信息。本应用将通过对用户密码进行加密等安全措施确保您的信息不丢失,不被滥用和变造。尽管有前述安全措施,但同时也请您注意在信息网络上不存在“完善的安全措施”。

(b) 在使用本应用网络服务进行网上交易时,您不可避免的要向交易对方或潜在的交易对

7.本隐私政策的更改

(a)如果决定更改隐私政策,我们会在本政策中、本公司网站中以及我们认为适当的位置发布这些更改,以便您了解我们如何收集、使用您的个人信息,哪些人可以访问这些信息,以及在什么情况下我们会透露这些信息。

(b)本公司保留随时修改本政策的权利,因此请经常查看。如对本政策作出重大更改,本公司会通过网站通知的形式告知。

方披露自己的个人信息,如联络方式或者邮政地址。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息泄密,尤其是本应用用户名及密码发生泄露,请您立即联络本应用客服,以便本应用采取相应措施。

关于HitTest在一个view点击时会被调用两次的官方解释

关于HitTest在一个view点击时会被调用两次的官方解释

Yes, it’s normal. The system may tweak the point being hit tested between the calls. Since hitTest should be a pure function with no side-effects, this should be fine.

///

是的,这是正常的。系统可能会在调用之间调整被测试的点。由于hitTest应该是一个没有副作用的纯函数,所以这应该没问题。

RxSwift使用小结

【本文适用于有一定swift基础的同学】

1、按钮点击

tapButton.rx.tap.subscribe({ [weak self] _ in
			guard let this = self else {
				return
			}
			guard let text = this.numberLabel.text else {
				return
			}
			guard let number = Int(text) else {
				return
			}
			this.numberLabel.text = String(number+1)
		}).addDisposableTo(disposeBag)

2、按钮长按

let longPressGesture = UILongPressGestureRecognizer()
		longPressGesture.rx.event
			.subscribe(onNext: { [weak self] _ in
				guard let this = self else {
					return
				}
				guard let text = this.numberLabel.text else {
					return
				}
				guard let number = Int(text) else {
					return
				}
				this.numberLabel.text = String(number+1)
			}).addDisposableTo(disposeBag)
		self.tapButton.addGestureRecognizer(longPressGesture)
		
		tapButton.rx.tap
			.subscribe(onNext: { [weak self] in
				guard let this = self else {
					return
				}
				guard let text = this.numberLabel.text else {
					return
				}
				guard let number = Int(text) else {
					return
				}
				this.numberLabel.text = String(number+1)
			}).addDisposableTo(disposeBag)
		
		resetButton.rx.tap
			.subscribe(onNext: { [weak self] in
				guard let this = self else {
					return
				}
				this.numberLabel.text = "0"
			}).addDisposableTo(disposeBag)

3、UISlider

slider.rx.value.subscribe({
			[weak self] _ in
			guard let this = self else {
				return
			}
			this.calculator()
		}).addDisposableTo(disposeBag)

4、UITextField

numberTextField.rx.controlEvent(.touchDown).subscribe({
			[weak self] _ in
			guard let this = self else {
				return
			}
			this.numberTextField.text = ""
		}).addDisposableTo(disposeBag)

5、Swipe

let gesture = UISwipeGestureRecognizer()
		gesture.direction = UISwipeGestureRecognizerDirection.down
		
		_ = gesture.rx.event.subscribe({
			[weak self] _ in
			guard let this = self else {
				return
			}
			this.view.endEditing(true)
		})
		
		view.addGestureRecognizer(gesture)

未完待续。。。

Star HomePage

您好,非常高兴您能使用Star这款app,我是App的开发者AusinDaddy。

如您所见,我只是个人开发者,出于兴趣爱好开发了这款app,由于是业务时间进行维护与更新,所以可能不能及时对您的需求或者建议进行反馈,还请见谅。但请放心的是我一定会坚持做下去,有什么好的建议或意见已经会采纳。您可能通过我的QQ联系到我:33142100。

Star这款app的开发初衷就是为了大家的健康,现在人生活节奏都很快,很容易忽视了健康,或者亲情,或者爱情,Star就是大家的助手,提醒你适量运动,或者看看书,上班打卡之类的。

Star由于是个人开发,尽量不会收集大家的隐私信息,存储信息毕竟还是很贵的事情,后续如果有需求我们会告知大家。

目前收集的信息有:手机号、昵称、健康信息(来自于HealthKit)、公司位置(用于提醒打卡等功能),后续可能会做一定的轻社交功能。

说完了,希望大家使用的愉快。

Hello, I am very glad that you can use the Star app. I am the developer of the app, AuxinDaddy.

As you can see, I’m just an individual developer. I developed this app for my hobbies. Due to the maintenance and updating of business hours, I may not be able to provide timely feedback on your needs or suggestions. Please forgive me. But please rest assured that I will definitely stick to it and that any good suggestions or opinions have already been adopted. You may contact me through my QQ: 33142100.

Star’s original intention of this app is for everyone’s health. Now people have a fast pace of life. It is easy to ignore health, or affection, or love. Star is everyone’s assistant, reminds you to exercise in moderation, or read books, and go to work to punch cards. some type of.

Because Star is a personal development, we will try our best not to collect everyone’s private information. After all, it is still a very expensive thing to store information. We will inform you if there is any demand.

Currently collected information includes: mobile number, nickname, health information (from HealthKit), company location (used for reminding punching and other functions), and follow-up may be done with some light social functions.

Finished, I hope everyone’s happy.

SQLCipher学习

今天大概学习了下SQLCipher,只是了解了下,这里做下记录。

我的理解,SQLCipher是对SQLite的加密版本,参考他们的Github自己的描述:

SQLCipher is an SQLite extension that provides 256 bit AES encryption of database files.

所以使用的时候,直接按照SQLite进行使用就好了。

由于我平时直接使用SQLite还是比较少的,大概只是基于下面的普通的增删改查,先mark一下,后续再补充。

ZXWebImage开始开发,mark一下

最近准备尝试写一下iOS项目中常用的图片加载框架,参考的目标就是著名的SDWebImage,当然思路其实没什么好讨论的,也是用到了缓存,队列等知识,希望自己能坚持做完。mark一下SDWebImage的基本框架,如下:

查看缓存

• 缓存命中

◦ 返回图片

◦ 更新 UIImageView

• 缓存未命中

◦ 异步下载图片

◦ 加入缓存

◦ 更新 UIImageView

基本思路是上面这些,但是还是可以做一些定制的UI的,目前还没想好要做什么牛逼的事情,暂时先打到差不多的用法吧。