Object-C 创建对象分为两个步骤 : 分配内存、初始化
例:Fraction *frac=[[Fraction alloc] init] ;
1.
alloc 是从 NSObject 继承而来的类方法,用于给对象分配足够的存储空间,赋于初值为0。(整数类型为 0,浮点数为 0.0,BOOL 为 NO,对象类型为 nil,alloc 方法返回对象的指针)
2.
init是从NSObject继承而来的成员方法,如果你创建自己的类,那你需要定制自己的 init 方法。
Object-C 对 init 方法没有特殊的要求,就是一个普通方法而已,只不过习惯以init 作为方法前缀,这种方法的作用就是为对象初始化。
一般 init 方法都返回当前类型的指针或者 id 类型,所以一般在创建对象时,都会指定明确的对象类型,将id类型赋给它。例子中就把初始化后的ID 赋给了 Fraction类型的指针*frac.
在谈论内存分配之前,老头子先讲解了初始化,因为我之前学习过JAVA,这个相当于JAVA中的构造方法。也就是说,在每次创建对象的时候,都需要调用初始化方法。
在众多的初始化方法中,特别需要注意的是,每个类都需要一个默认初始化方法。这个方法会在每次创建对象的时候被调用,它存在于你设计的其他初始化方法之中。
如:
这是默认初始化方法的两种写法,它们的作用是相同的,经常使用的写法是右边这个。需要注意的是,这里self = [super init] ,不是判断self与[super init]是否相等,而是判断是否可以成功初始化。[super init]:父类初始化成功的话,通过=给self,这样self成为一个非空对象,整个来说即非false(非NO) 。
在其他初始化方法中,会调用你所写的默认初始化方法:
self = [self init],super换成了self,这是因为调用的是本类中的默认初始化方法,然后再由本类中的这个默认初始化方法调用父类的默认初始化方法,完成初始化。
所以设计你的初始化方法的时候,注意self和super ,不要用错地方了。
初始化方法都不会太复杂,大多进行的都是简单的将传入值,赋值给对象里的实例变量。就像图片里的:
self.valiOperations = anArray ;
你不用关系这个变量到底是什么,回顾一下前面学过的知识,应该不难知道这里self.valiOperations其实是调用了set方法。
当你的对象是nil,调用任何方法都会返回0,也就是什么都没做。
不是每一次创建对象都需要使用到init和alloc
比如 : [dictionary allkeys ]