objective-C学习笔记(五)函数成员:初始化器和析构器

时间:2022-09-11 05:50:36

初始化器: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(后置调用)。