为什么我们在检查符号的存在时不能使用否定运算符



此问题的答案表明if (x != nil)if (x)相同。

但苹果的文档上写着:

注意:在检查符号是否存在时,必须在代码中将其显式地与NULL或nil进行比较。不能使用否定运算符(!)来否定符号的地址。

这似乎与https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithObjects/WorkingwithObjects.html#//apple_ref/doc/uid/TP40011210-CH4-SW22

文档指出不能否定地址。换句话说,你不能这样做:

if (!MyWeakLinkedFunction) {
    // symbol doesn't exist
}

你必须改为:

if (MyWeakLinkedFunction == NULL) {
    // symbol doesn't exist
}

然而,这两项工作:

if (MyWeakLinkedFunction) {
    // symbol exists
}

或:

if (MyWeakLinkedFunction != NULL) {
    // symbol exists
}

IMO,我们可能只是想得太多了。

检查符号是否存在时,必须明确将其与代码中的NULL或nil进行比较。

这部分只说-如果你想检查是否存在(而不是不存在),你必须明确地与NULLNIL 进行比较

不能使用否定运算符(!)来否定的地址符号。

如果你成功否定了符号的地址,那你就只能成功地检查不存在(而不是存在)。

当我遇到以下内容时,我认为这可能是一种可能性,因为他们在这里使用了可用性一词——

注意:要检查函数的可用性,请显式比较其地址为NULL或nil。不能使用否定运算符(!)否定函数的地址以检查其可用性。此外,请注意C函数的名称与其地址同义。也就是说,&myFunction相当于myFunction。

相关内容

  • 没有找到相关文章

最新更新