我不应该使用自我> iVar =某事;而不是iVar =我的init中的东西

时间:2013-09-05 13:49:58

标签: ios objective-c initialization

在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而不是原始对象)?

1 个答案:

答案 0 :(得分:3)

1)在 if 条件下进行分配。

2)当设置 myInstanceVariable 时,self已经指向新对象,因为 if 条件中的赋值是先完成的。实际上,如果 if 条件中的赋值不成功,则永远不会处理 myInstanceVariable 赋值。

顺便说一下。据我所知,对 myInstanceVariable 的所有直接调用都解析为:

无论如何,

self-> myInstanceVariable

编辑: 只是为了在评论中提出您的问题,请看一下这个答案: https://stackoverflow.com/a/1341801/703809