【发布时间】:2011-05-07 12:55:47
【问题描述】:
出于审美原因,我决定更改此设置:
if ((self = [super init])) {
// init self
}
return self;
进入这个:
if (!(self = [super init])) return nil;
// init self
return self;
理论上,他们做同样的事情。第一个是经典方式,简单有效。调试第二个,我发现它几乎可以工作。 "if" 正确,init 代码也正确,但是,返回 "self" 后,调试器返回 "if" 并返回 nil!
我使用第二个类创建的所有类都将恢复为使用“正确”方式,因为它们使用 nil 进行初始化,但我真的很想知道它为什么会这样!恐怕这可能是其他错误的结果!
【问题讨论】:
-
如果在 Xcode 4 中发生这种情况,那么原因是调试器只是在 ObjC 方法中很糟糕并疯狂地跳来跳去。
-
这不是仅调试器的行为。它确实将“nil”返回给调用者。哦,初始化代码被调用了(包括我放在那里的一些“NSLog”。
-
@Eduardo Costa:好吧,那就别管我的评论了。
-
请提供重现问题的最小测试用例。
-
@Nick / @Josh:事实上,将作业移出 if() 似乎是 Apple 现在的首选方式。
标签: objective-c xcode ios