此问题的答案表明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进行比较。
这部分只说-如果你想检查是否存在(而不是不存在),你必须明确地与NULL
或NIL
进行比较
不能使用否定运算符(!)来否定的地址符号。
如果你成功否定了符号的地址,那你就只能成功地检查不存在(而不是存在)。
当我遇到以下内容时,我认为这可能是一种可能性,因为他们在这里使用了可用性一词——
注意:要检查函数的可用性,请显式比较其地址为NULL或nil。不能使用否定运算符(!)否定函数的地址以检查其可用性。此外,请注意C函数的名称与其地址同义。也就是说,&myFunction相当于myFunction。