"便利构造函数:自己不创建对象
1、作用:判断参数条件是否合法
2、传递‘常用/重要参数’
3、只有便利的构造函数才返回nil
4、‘指定’的构造函数不允许返回nil,必须返回一个对象
5、‘指定构造函数’,默认的都是,除了convenience修饰的
6、只有便利构造函数可以调用self.init
7、子类只能继承父类的指定构造函数,便利构造函数是本类的
"析构函数,类似于oc中的dealloc。对象被释放之前调用,可以用于释放资源,deinit开头
例子:在某个类中开启一个时钟,可以在析构函数中停止
1、没有func
2、没有()
3、不能被重载
4、不能直接被调用,被自动调用
"懒加载",是一个闭包,闭包只会执行一次
'lazy var dataList:[String] = {
'}()
1、dataList能够存储字符串数组
2、当调用dataList的时候,如果没有值,会执行后面的闭包
3、结果会保存在dataList中
4、lazy的用处:如果没有lazy,视图控制器一旦被创建,dataList就会被初始化
5、简单写法:'lazy var dataList:[String] = ["张三","李四"]
"setter"
1、在didSet的时候,如果小心可以直接解包
"只读属性-‘计算型属性,本身不会占用存储空间’,根据条件计算出来的,不允许修改
'var title:String? {
return "简略写法,直接return就好了,get only的属性"
'}
get only的完整写法
'var title:String? {
get {
return "完整写法,直接return就好了,get only的属性,只有get"
}
'}
"闭包的循环引用
1、闭包是准备好的代码,必须要使用self
"闭包的循环引用解决方式:
1、仿照oc解决 weak var weakSelf = self
2、swift中有特殊的写法 [weak self]
[weak self] 和 __weak typeof(self) 作用类似 -> 对象被回收是 内存地址会自动指向nil 更加安全 推荐使用这种方式
3、[unowned self] 不安全,会记录self的地址(地址是始终存在的,但是不会做强引用,一旦self真的释放了,程序会崩溃),容易造成野指针访问,[unowned self] 和 __unsafe__retained作用类似 -> 对象被回收是 内存地址不会自动指向nil 会造成野指针访问。特点:对象被释放,地址仍存在
oc中网络访问
nonnull "!" 不能为空
nullable "?" 可选项
"Swift的json反序列化
"重写:覆盖了父类的方法
"重载构造函数:函数名相同,参数不同
如果没有实现init()构造函数,一旦实现了其他的构造函数,默认的init()构造函数将无法被访问