给属性开辟内存空间 @H_502_2@给属性设置初始值 @H_502_2@最终目标创建一个对象 @H_502_2@用init@H_502_2@构造函数 @H_502_2@参数有可能不同
(1@H_502_2@)//@H_502_2@定义属性使用var @H_502_2@是我们开发需要的
var name:@H_502_2@ String
//@H_502_2@可选属性 @H_502_2@- @H_502_2@默认等于nil @H_502_2@可以不需要在构造函数里进行初始化 title@H_502_2@属性没有分配内存空间 @H_502_2@在其他地方设置值的时候才需要分配内存空间
var title:@H_502_2@String?@H_502_2@
//‘override’ @H_502_2@重写关键字 @H_502_2@子类继承父类 @H_502_2@需要对父类里面的方法进行扩展 @H_502_2@就叫重写@H_502_2@
//@H_502_2@调用super init@H_502_2@()之前 @H_502_2@保证子类初始化完成
//@H_502_2@在swift@H_502_2@中 @H_502_2@在当前工程 @H_502_2@类都是全局共享的 @H_502_2@不用导头文件 @H_502_2@
函数名相同 @H_502_2@参数名或者参数个数不同 @H_502_2@就是重载 @H_502_2@不仅限于构造函数 @H_502_2@包括其他函数 @H_502_2@
//@H_502_2@属性名字和传入的参数一样 @H_502_2@需要使用self@H_502_2@区分
(3@H_502_2@)重写
//@H_502_2@如果当前类中提供了构造函数 @H_502_2@则默认的构造函数没有了 @H_502_2@因为默认的构造函数init @H_502_2@无法给子类的属性进行初始化
2.KVC
本质:@H_502_2@ 在运行时动态向对象发送@H_502_2@ setValue:@H_502_2@forKey:@H_502_2@
(1@H_502_2@)可选类型的属性可以不在构造函数中初始化
(2@H_502_2@)KVC@H_502_2@是OC@H_502_2@特有的 age@H_502_2@在swift@H_502_2@不兼容 @H_502_2@基本数据类型不能使用可选类型 @H_502_2@要进行初始化
(3@H_502_2@)如果子类没有提供构造函数 @H_502_2@则可以使用父类的构造函数
(1@H_502_2@)‘@H_502_2@?’ @H_502_2@判断前面的可选类型的对象是否为nil @H_502_2@如果为nil @H_502_2@则后面的代码不执行 @H_502_2@直接返回nil @H_502_2@如果不为nil @H_502_2@则执行后面的代码 @H_502_2@返回结果
(4@H_502_2@)只有便利构造函数中能使用self. init@H_502_2@()
(5@H_502_2@)便利构造函数可以返回nil@H_502_2@
4.@H_502_2@懒加载
使用lazy@H_502_2@关键字 @H_502_2@在需要的时候 @H_502_2@对其进行创建 @H_502_2@并把返回的值给定义的lazy@H_502_2@属性
(1@H_502_2@)可以使用闭包作为懒加载
(@H_502_2@2)@H_502_2@didSet 当外界设置完值之后@H_502_2@ 会直接调用@H_502_2@didSet
(3@H_502_2@)计算属性可以省略get @H_502_2@,不能赋值
-不能存值 @H_502_2@只能取值
-不需要开辟内存空间 @H_502_2@耗费cpu@H_502_2@
-能存值 @H_502_2@能取值
-需要开辟内存空间
-耗费内存
(5) @H_502_2@懒加载 @H_502_2@闭包只会执行一次 @H_502_2@开辟内存存储
5.@H_502_2@闭包的循环引用
(@H_502_2@1)析构函数@H_502_2@ deinit{}@H_502_2@
(@H_502_2@2)对象销毁后@H_502_2@ weakSelf指向的地址为@H_502_2@nil
(@H_502_2@3)@H_502_2@unowned相当于@H_502_2@oc中的@H_502_2@__unsafe_unretain 对象销毁后@H_502_2@ 指向的地址不变@H_502_2@
swift与@H_502_2@OC共存时@H_502_2@ 需要桥接@H_502_2@
(1@H_502_2@)try@H_502_2@! @H_502_2@向系统保证我的数据一定能够反序列化成功
try@H_502_2@? @H_502_2@如果返回的数据不能反序列化成功 @H_502_2@则直接返回nil@H_502_2@