两种初始化方法:[Class new] [[Class alloc]init] 两者等价,惯用后者
分配对象
分配(allocation)是一个新对象诞生的过程。是从操作系统获得一块内存并将其指定为存放对象的实例变量的位置。向某个类发送 alloc 消息的结果,就是为该类分配一块足够大的内存,以存放该类的全部实例变量。
分配内存时,alloc 方法将这块内存区域全部初始化为0。所有的 BOOL 类型变量被初始化为 NO,所有的 int 类型变量被初始化为 0,所有的 float 类型变量被初始化为 0.0,所有的指针被初始化为 nil。
初始化对象
初始化(initialization)从操作系统取得一块内存,准备用于存储对象。init 方法(即执行初始化操作的方法)几乎总是返回它们正在初始化的对象。
初始化对象时,应该像下面这样嵌套调用 alloc 和 init 方法:
Car *car = [[Car alloc] init];
而不是这样: 因为初始化方法返回的对象可能与分配的对象不同。
Car *car = [Car alloc];
[car init];
初始化函数规则
如果构造了 一个初始化函数,则一定要在你自己的指定初始化函数中调用超类的指定初始化函数。
如果初始化函数不止一个,则要选择一个作为指定初始化函数。被选定的方法应该调用超类的指定初始化函数。要按照指定初始化函数的形式实现所有其他初始化函数。
在你自己的初始化方法中,需要调用自己的指定初始化函数或者超类的指定初始化函数。一定要将超类的初始化函数的值赋给 self 对象,并返回你自己的初始化方法的值。