我不是下列建设这段代码等效
if (self = [super init])
{
//do something with self assuming it has been created
}
为以下等同的粉丝吗?
self = [super init];
if (self != nil)
{
//Do something with Self
}
我不是下列建设这段代码等效
if (self = [super init])
{
//do something with self assuming it has been created
}
为以下等同的粉丝吗?
self = [super init];
if (self != nil)
{
//Do something with Self
}
是的,他们是。 =运算符返回值。
Lars D有你的答案,但如果你正在寻找一种方式来清理你的init
方法,我更喜欢以下内容:
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
// your logic
return self;
}
它的CRAM所有的不愉快的成一条线,它离开你的方法的其余部分没有一个if
声明(和相关的括号)。
我来自Delphi背景,所以我发现赋值运算符和等号运算符在if语句中混合过度混淆,这就是为什么我试图将它从if语句中移出。 – 2009-11-07 09:56:31
你也不妨参考Wil Shipley在他的"self = [stupid init];"这篇文章中对此的看法。他原本建议
- (id)init;
{
if (![super init])
return nil;
[...initialize my stuff...]
return self;
}
但是它展示了在这可能失败,目前并不得与未来苹果公司的一些变化工作的情况屈指可数。他现在推荐
- (id)init;
{
if (!(self = [super init]))
return nil;
// other stuff
return self;
}
是的,他们是一样的。 – codelogic 2009-11-07 09:04:13
@codelogic为什么不能回答? – 2009-11-07 09:28:40