问题描述
我想知道这两个是否相等:
if 语句中的单括号:
- (instancetype)init {
if (self = [super init]) {
// ...
}
return self;
}
if 语句中的双括号:
- (instancetype)init {
if ((self = [super init])) {
// ...
}
return self;
}
解决方法
是的,......因为它只取决于被比较的表达式,无论有多少括号(应该是偶数)
括号帮助编译器理解具有优先级的表达式,目标c中的if
语句至少需要一个()
,而添加更多也可以,但没用
是的,它们是平等的。
self
正在获取需要在 [super init]
调用后存储的引用。两者都做同样的事情。
它们是相同的,因为它们意味着相同的东西并产生相同的代码,但是编译器的行为会略有不同。
在类似 C 的语言中,一个在视觉上很难发现的简单打字错误是输入 =
,即 assignment,当 ==
时,即 {{1} }, 打算。这个错误会产生非常不同的结果并且很难发现错误。例如:
equality
测试 if (a == b) { ... }
和 a
是否具有相同的值,如果是,则执行 b
中的语句。但是:
if
将 if (a = b) { ... }
中的值赋给 b
,然后如果 a
和 a
的值(由于赋值而具有相同的值)是,则执行语句非零。显然,这两种行为完全不同。
为了帮助编译器在 b
中看到单个 =
,它会发出警告,提醒程序员注意可能出现的拼写错误。如果使用双括号,警告将被忽略:
if
这就是为什么你会在代码中看到这种模式。 HTH