如何解决这两个实例类型初始化方法是否相等?
我想知道这两个是否相等:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。