为什么要将常量的地址与NULL进行比较?

时间:2016-11-22 15:28:06

标签: ios objective-c

#define _UIKeyboardFrameEndUserInfoKey (&UIKeyboardFrameEndUserInfoKey != NULL ? UIKeyboardFrameEndUserInfoKey : @"UIKeyboardBoundsUserInfoKey")

UIKeyboardFrameEndUserInfoKey != NULL&UIKeyboardFrameEndUserInfoKey != NULL之间有什么区别吗?

我试过:if(&UIKeyboardFrameEndUserInfoKey != NULL) {...}并收到警告

  

'UIKeyboardFrameEndUserInfoKey'的地址比较不等于   空指针始终为真

1 个答案:

答案 0 :(得分:8)

将常量(或函数)的地址与null进行比较通常用于确定是否定义了常量。

您收到警告,因为您正在构建的SDK(最小目标版本)具有定义的常量,因此它将始终评估为true(地址不为null)。但是,当在没有定义常量的iOS版本上运行时,它将不为真(地址将为null)。

如果您将目标版本降低到低于定义常量的版本,它将弱链接到该SDK,您将不再收到警告。

详细了解Using SDK-Based Development