gpt4 book ai didi

objective-c - 示例代码中的双括号

转载 作者:太空狗 更新时间:2023-10-30 03:32:37 25 4
gpt4 key购买 nike

我在示例和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com