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