标签:image elf ret logs 释放 完全 link 实例化 name
// Person 类没有 ‘初始化器‘s, 构造函数可以有多个, 默认是 initclass Person: NSObject { var name: String // 重写: 父类有这个方法, 子类重新实现, 需要 override 关键字 override init() { // 给 self.name 初始化: 分配空间, 设置初始值 name = "AAA" super.init() } // 重载: 函数名相同, 会是参数和个数不同 // 重载可以给自己的属性从外部设置初始值 init(name: String) { // 使用参数的 name 设置属性 self.name = name // 调用父类型的构造函数 super.init() } }
class Person: NSObject { // name 属性是可选的, 在 OC 中很多的属性都是在需要的时候创建的 // 例如 vc.view / tableViewCell.textLabel / detailLabel / imageView //延迟加载:在需要的时候再创建 var name: String? // 给基本数据类型初始化 // var age: Int? 当使用 KVC 会提示无法找到 age 的 KEY //原因: Int是一个基本数据类型的结构体, OC中只有基本数据类型 var age: Int = 0 // 如果是 private 属性, 使用 KVC 设置值的时候, 同样无法设置 // 如果设置成 private 属性 / 方法, 禁止外部访问的 // private var title: String? init(dict: [String : Any]) { // 保证对象已经完全初始化完成 super.init() // 使用 self 的方法 setValuesForKeys 之前, 应该调用 super.init() // KVC的方法,是OC的方法,在运行时给对象发生消息,要求对象已经实例化完成 setValuesForKeys(dict) // super.init() } // 重写父类的方法 override func setValue(_ value: Any?, forUndefinedKey key: String) { // 设置 调用 super, 将父类的代码实现完全覆盖, 防止键值对不匹配时的崩溃 } }
class Student: NSObject { var name: String? var age: Int = 0 // 便利构造函数 convenience init?(name: String, age: Int) { if age > 100 { return nil } // 使用 self 访问 name 之前, 应该调用 self.init // self.name = name // 实例化当前对象 self.init() // 执行到此 self 才允许被访问, 才能访问对象的属性 self.name = name } }
deinit { /* 1.跟踪对象的销毁 2.必须释放 -通知, 不释放不会崩溃, 但是会造成内存泄露 - KVO,不释放会崩溃 - NSTimer / CADisplayLink */ }
标签:image elf ret logs 释放 完全 link 实例化 name
原文地址:http://www.cnblogs.com/fanxiaocong/p/6413261.html