在ObjectiveC中,推荐的init方法的惯用语是:
- (id)init {
if (self = [super init]) {
myInstanceVariable = someConstant;
}
return self;
}
这是因为,superClass的init可能会返回一个与当前对象不同的对象,使用[self release]释放当前对象;
如果发生这种情况:
1)调用[super init]后,是否会控制返回原始对象的init方法?
2)并且,下一行不会设置原始对象的myInstanceVariable(超级类称为release)吗?
如果是这种情况,请将行更改为:
self-> myInstanceVariable = someConstant;
help(这样,设置[super init]返回的对象的myInstanceVariable而不是原始对象)?
答案 0 :(得分:3)
1)在 if 条件下进行分配。
2)当设置 myInstanceVariable 时,self已经指向新对象,因为 if 条件中的赋值是先完成的。实际上,如果 if 条件中的赋值不成功,则永远不会处理 myInstanceVariable 赋值。
顺便说一下。据我所知,对 myInstanceVariable 的所有直接调用都解析为:
无论如何,self-> myInstanceVariable 。
编辑: 只是为了在评论中提出您的问题,请看一下这个答案: https://stackoverflow.com/a/1341801/703809