对于alloc方法,我们最先知道的肯定是,从应用程序的虚拟地址空间上为该对象分配足够的内存。
但是不仅仅是这样,其实还做了以下3件事情:
- 将该新对象的引用计数 (Retain Count) 设置成 1。
- 将该新对象的 isa 成员变量指向它的类对象。
- 将该新对象的所有其它成员变量的值设置成零。(根据成员变量类型,零有可能是指 nil 或 Nil 或 0.0)
而,init方法会做真正的初始化工作,让对象的成员变量的值符合我们程序逻辑中的初始化状态。例如,NSMutableString 可能就会额外再申请一块字符数组,用于动态修改字符串。
在某些情况下,init会造成allo原本空间不够用,而第二次分配内存空间。
比如;
NSString * s = [NSString alloc]; |
为此,苹果引入了一个编程规范,让大家写的时候将 alloc 和 init 写在一行。所以上面的代码正确的写法是
NSString * s = [[NSString alloc] init]; |