1.分配对象
分配(allocation)是一个新对象诞生的过程。最美好的时刻,是从操作系统获得一块内存并将其指定为存放对象的实例变量的位置。向某个类发送alloc消息的结果,就是为该类分配一块足够大的内存,以存放该类的全部实例变量。
一个刚刚分配的对象并不能立即使用,需要先初始化该对象,然后才能使用它。像java构造函数中执行分配和初始化全套。
2,初始化对象
初始化(initialization)从操作系统取得一块内存,准备拥有存储对象。init方法几乎总是返回他们正在初始化的对象。
Car *car = [[Car alloc] init];
编写初始化方法
- (MyClass *)init
{
if (self = [super init]) {
//执行一些资源、变量的初始化工作
}
return self;
}
便利初始化函数
许多类包含便利初始化函数,多数以init...开头
string = [[NSString alloc] initWithFormat : @"%d or %d", 25, 624];
-(id) initWithContentsOfFile: (NSString *) path;
此方法打开指定路径上的文本文件,读取文件内容,并使用文件内容初始化一个字符串,读取文件/tmp/words.txt的代码如下:
string = [[NSString alloc] initWithContentsOfFile: @"/tmp/words.txt"];
这行代码的功能非常强大,完成了C语言的一大堆代码(必须打开文件,读取数据块,追加到字符串,关闭文件)。
初始化函数规则
不需要为你的类创建初始化函数方法。如果不需要设置任何状态,或者只需要alloc方法将内存清零的默认行为,则不需要担心init。
如果构造了一个初始化函数,则一定要在你自己的指定的初始化函数中调用超类的指定初始化函数。
如果初始化函数不止一个,则要选择一个作为指定初始化函数。被选定的方法应该调用超类的指定初始化函数。要按照指定初始化函数的形式实现所有其他初始化函数。
大概样子像下面的
init1(A, a){
initFinal(a,defaultB);
}
参考: