objective-C学习笔记(五)函数成员:初始化器和析构器
初始化器:init
对象初始化器: -(id)init 可以重载多个。
类型初始化器: +(id)initialize只能有一个。
对象初始化器:
初始化对象实例时,init通常和alloc(手动内存分配)搭配使用。
alloc所做的事情——NSObject已实现。
·在堆上分配合适大小的内存。
·将属性或者实例变量的内存置0。
init所做的事情——可以自定义:
·调用父类初始化器[super init](前置调用)
·初始化当前对象的实例变量(注意是实例变量,不是属性)
new 相当于调用alloc/init的无参数版本。
·Book* book = [Book new];
类初始化器:一般用的很少
比如说类里有一个全局的静态变量,就需要在类初始化的时候赋个初值。
initialize在每个类使用之前被系统自动调用,且只调用一次(每个进程周期)。
子类的initialize会自动调用父类的initialize(前置调用)。
析构器:dealloc (也叫释放器)
释放对象所拥有的资源,无返回值的函数。
只有对象析构器,没有类型析构器。
自动实现:1.ARC将对象属性引用计数减持。
手动实现:2. 释放不受ARC管理的动态内存,如malloc分配的内存。
手动实现:3. 关闭非内存资源,如文件句柄,网络接口。。。
dealloc由ARC根据对象引用计数规则,在释放对象内存前自动调用,无法手动调用。
子类的dealloc会自动调用父类的dealloc(后置调用)。