这两个实例类型初始化方法是否相等?

问题描述

我想知道这两个是否相等:

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,然后如果 aa 的值(由于赋值而具有相同的值)是,则执行语句非零。显然,这两种行为完全不同。

为了帮助编译器在 b 中看到单个 =,它会发出警告,提醒程序员注意可能出现的拼写错误。如果使用双括号,警告将被忽略:

if

这就是为什么你会在代码中看到这种模式。 HTH

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...