Vic*_*nin 31 iphone objective-c
在这种情况下,如果我们在init方法中返回nil,那么使用retain count会发生什么以及谁将要释放这个对象?
正如我在调用alloc(它将在init之前发生)时所做的那样,保留计数将变为1.现在,调用init并且由于某种原因让它无法初始化对象,因此它返回nil.
现在看起来我们的对象的保留计数等于1,没有人引用它来调用release.
我们应该在init中为这种情况调用[self autorelease]还是做其他事情?
bbu*_*bum 46
请参阅文档中的分配和初始化对象.
具体来说,如果初始化程序中有错误,那么您release self返回nil:
- init
{
self = [super init];
if (self) {
if (... failed to initialize something in self ...) {
[self release];
return nil;
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
现在,考虑一下当你打电话给[super init]它时会发生什么nil.上面的模式已经被使用,self已经发布了什么,nil返回表明实例已经消失.没有泄漏,每个人都很开心.
这也是一个有效的模式(假设它self是一个实例MyClass):
- init
{
self = [super init];
if (self) {
... normal initialization here ...
} else {
self = [MyClass genericInstanceWhenInitializationGoesBad];
self = [self retain];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
因为init预期会返回一些东西retained(通过暗示被束缚+alloc),那么[self retain]虽然它看起来很傻,但实际上是正确的.在self = [self retain]的情况下,仅仅是作为额外的防守MyClass覆盖retain做一些奇怪的.
| 归档时间: |
|
| 查看次数: |
9304 次 |
| 最近记录: |