Iphone 实现这样的目标C init方法有什么意义?
可能重复:Iphone 实现这样的目标C init方法有什么意义?,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,可能重复: 我经常看到这个“if(self=[super init])”构造,我想知道为什么会这样做 - (id) init { if (self = [super init]) { // how could self = [super init]; ever fail? } return self; } 假设您的超类执行以下操作: - (id)init { self = [super init]; if (self) { se
我经常看到这个“if(self=[super init])”构造,我想知道为什么会这样做
- (id) init {
if (self = [super init]) {
// how could self = [super init]; ever fail?
}
return self;
}
假设您的超类执行以下操作:
- (id)init {
self = [super init];
if (self) {
self->foo = CreateExpensiveWidgetOverTheInternetByTrain();
if (!self->foo) {
// widget creation failed, bail out
[self release];
self = nil;
}
}
return self;
}
就是这样 有很多方法可以失败:
final
”类进行子类化,即专门设计为不允许子类化的类initWithArgument的情况下:参数:
;您提供的参数或参数无效self
上的release
方法,并返回nil
这一政策有两个主要后果:
- 任何从初始值设定项方法接收
的对象(无论是您自己的类、子类还是外部调用方)都应该能够处理它。如果调用方在调用之前建立了对对象的任何外部引用,则必须撤消所有连接nil
- 必须确保
方法在存在部分初始化的对象时是安全的dealloc
谢谢你的评论,这是个骗局。我投票决定关闭而不是删除。。。我不确定正确的方法是什么。相同的区别。当您投票关闭时,选择“精确复制”,您将能够指定重复的消息。据我所知,评论是自动的。