我在XCode生成的示例和存根中看到了很多这样的代码:
if ((self = [super init])) {
}
Run Code Online (Sandbox Code Playgroud)
我不清楚条件中双括号的意图.
要扩展@Anders评论,它保护您的特定问题是这样的:
if (foo = x) { do_something() };
Run Code Online (Sandbox Code Playgroud)
90%的时间这是一个错误.你想说foo == x.但是,有10%的时间,你真的意味着"将x分配给foo然后测试真相." 这是典型的案例while (ch = getchar()).但这if (self = [super init])是另一个很好的例子.编译器假定这样的事情是错误并抛出警告,除非你通过使用双括号告诉编译器你真正的意思.
就个人而言,我只是这样做:
self = [super init];
if (self != nil)
{
...
}
return self;
Run Code Online (Sandbox Code Playgroud)
这是一个额外的行,但是当init调用很长时它会使事情变得更加清晰.
顺便说一句,Big Nerd Ranch成名的Aaron Hillegass向我们中的几个人提出挑战,想出任何一个这个self==nil检查确实很重要的案例.这些案例存在,但它们非常少(您可能会添加self为NSObservation观察者,nil在这种情况下您不希望它).把它拿走它的价值; 在我的个人代码中,我经常跳过nil支票,但在我的专业代码中,这是我团队标准的一部分.
另外,出于某种原因,Apple添加了一个额外的gcc选项-Wmost,可以关闭此警告.我想有人不喜欢打字额外的括号.把它关掉似乎是一个坏主意.
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |