gpt4 book ai didi

objective-c - Objective-C : if (obj) {. ..} 和 if (obj != nil) {...},哪个更好?

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

我看过很多 ObjC 代码:

obj = [[SomeObject alloc] init];
if (obj) {
/// ...
}

但是据我理解,()里面的值是一个boolean,0表示FALSE 1表示TRUE(其他语言还有一种情况是0为true,1为false),如果一个指针没有指向对于任何东西,它都设置为 NULL(nil),#defined 为 0,所以我想知道如果我这样做会更好吗:

if (obj != nil) {
/// ...
}

因为它正在检查 obj 是否为 nil,无论 nil 是什么值,所以它不依赖于 nil(或 NULL ) 恰好定义为 0?

最佳答案

编辑:经过一些测试后,我确定现代编译器实际上会为这两种情况创建相同的机器码

原帖:

使用起来(也许可以忽略不计)效率更高

if(obj) {

因为您不需要创建中间 bool 值(通过计算比较表达式)。关于非零为假,我不确定您指的是哪种“其他语言”;我能想到的最接近的事情是 c 程序为“成功”返回 0,为“错误”返回任何其他内容。我使用过的每一种现代语言都使用 0 作为 FALSE,使用任何非零值作为 TRUE。

在 Objective-C 中,nil 的字面意思是 0(被视为指针)。它不仅仅是一个指向零的指针,它作为一个指针也是零。因此,它可靠地等同于 FALSE(或者,在我们的术语中为“NO”)。

编辑经过一些测试后,我确定现代编译器实际上会为这两种情况创建相同的机器代码;可能是因为 nil 本质上被类型定义为 0,所以它知道两种检查方式都在说“如果这个指针不为零”。

关于objective-c - Objective-C : if (obj) {. ..} 和 if (obj != nil) {...},哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821282/

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