我在示例和 XCode 生成的 stub 中看到很多这样的代码:
if ((self = [super init])) {
}
我不清楚条件语句中双括号的用意。
最佳答案
为了扩展@Anders 的评论,它保护您免受的具体问题是这样的:
if (foo = x) { do_something() };
90% 的情况下这是一个错误。你的意思是说 foo == x
。但是在 10% 的情况下,您的真正意思是“将 x 分配给 foo,然后测试是否为真”。典型的情况是 while (ch = getchar())
。但是 if (self = [super init])
是另一个很好的例子。编译器假定此类事情是错误的并发出警告,除非您使用双括号告诉编译器您的意思是真的。
就我个人而言,我就是这样做的:
self = [super init];
if (self != nil)
{
...
}
return self;
这是一个额外的行,但当 init 调用很长时,它会让事情变得更清晰。
顺便说一句,Big Nerd Ranch 的 Aaron Hillegass 向我们中的一些人发出了挑战,要求他们想出这种 self==nil
检查实际上很重要的任何情况。这种情况是存在的,但它们非常少(您可以将 self
添加为 NSObservation
观察者,并且您不希望它是 nil
那种情况)。物有所值地接受它;在我的个人代码中,我经常跳过 nil
检查,但在我的专业代码中,它是我团队标准的一部分。
另一方面,出于某种原因,Apple 添加了一个额外的 gcc 选项 -Wmost
来关闭此警告。我猜那里有人不喜欢输入额外的括号。关闭它对我来说似乎是个坏主意。
关于objective-c - 示例代码中的双括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3323257/