对象的内存分配和初始化
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
与大多数面向对象语言不同,Objective-C将对象的内存空间分配(allocation
)和对象的初始化(initialization
)分成了两个独立的步骤。
特别地,每一个类都提供了一个类方法(无需实例化成一个对象就可以调用)'+alloc'
可以给一个新的对象分配内存空间。但是初始化确是一个实例方法(只有对象才可以调用),而非类方法。
按照惯例,通常初始化的方法是'-init'
。那么创建一个对象的通常方法见如下代码:
id newObj = [[SomeClass alloc] init];
调用alloc
方法后将返回一个未经初始化的新的实例对象,然后这个对象再调用init
方法去初始化它自己的实例变量。(实际上,当调用alloc方法后,对象的所有实例变量将会被初始化成0,并将之前提到过的特殊的变量isa指针初始化成指向该类的指针)。而alloc
和init
方法也可以被混合在一起,这个方法就是new
,如下:
id newObj = [SomeClass new];
而new
方法是简单的调用alloc
方法和init
方法,就像之前的代码一样。如果要给new
方法增加一些功能,就要通过重写new
方法,
例如:一个已经存在的对象调用new
方法可以重新初始化实例变量(跳过内存分配,仅仅初始化)。
在线练习
{$ activeFileHint $}