结论先行
user.mainland
并不是我们以为的BOOL
,而是一条内容为 @“false” 的 NSString 常量指针。在 Objective-C 的条件判断里,只要指针非空就视为真。这也是为什么:
po user.mainland
⇒ false(字符串文字)po !user.mainland
⇒ false(指针非空 →!
运算结果为 0 / NO)[user.mainland class]
⇒ __NSCFConstantString(常量 NSString 子类)
1️⃣ 复现现场
(lldb) po user.mainland // 打印对象本身
false
(lldb) po !user.mainland // 取反,再打印
false
(lldb) po [user.mainland class]
__NSCFConstantString
表面上看,user.mainland
像是一个布尔型属性;但