object-c学习笔记:对象初期化

init的标准写法:

- init
{
if (self = [super init]) {
//do some thing
}
return self;
}
object-c里这个初期化方法确实是很奇怪,self居然会在alloc 已经分配了内存之后发生变化,感觉有点无厘头:( 。object-c基础这本书里的解释是,父亲函数可以根据不同的情况,重新产生一个对象。至于子类的变量能否正确反应呢?原本生成的实例如何消灭?则还是一头雾水。基本的事实是:[super init] 有可能返回不同的对象,也有可能返回nil。只能先记住了。

 

同上面的问题,如果使用这样的代码,是否正确呢?

Car* car = [Car alloc];

[car init];

如果按照正常的思维,因该是正确的,alloc负责分配内存,init只是初期化值而已,但是[car init]是有可能返回不同的对象的,所有必须这样写:

Car* car = [[Car aollc] init];

这个问题最常见的就是NSString这个类,如果字符串太长,或是非英语都有能使得返回其他string类,事实上NSString虽然是用户使用的唯一接口,但实际上其背后是一群类,因为object-c的动态特性,你并不需要知道你实际用的是哪个类。

posted @ 2011-01-18 16:38  hjtc  Views(954)  Comments(0Edit  收藏  举报