(null)vs <null>之间有什么区别?

Jul*_*ian 1 crash null objective-c nsstring

我在我的应用程序中遇到随机崩溃,直到我将其缩小到特定方法.在那个方法中,我期待NSString一个参数.这NSString有时可以是零,在这种情况下,该方法结束并且不会造成伤害.

当我运行我的方法的参数时,NSLog(@"%@", myString)我发现我得到其中一个:

  1. 实际NSString的内容
  2. (空值)
  3. <NULL>

前两个是我的方法预期和处理.第三个,<null>,崩溃了我的应用程序-[NSNull length]: unrecognized selector sent to instance 0x1b2ace8.

我通过检查nil或找到解决问题的方法isKindOfClass,但我的问题是(null)和<null>之间的区别什么?.

Jos*_*ell 5

(null)NSLog()使用%@带有nil值的格式说明符时打印的字符串.<null>是发送descriptionNSNull单例(您通过其访问[NSNull null])的结果.

NSNull在Cocoa集合(NSArrayNSDictionary)中用作"无对象"占位符,因为它们不能包含nil.

这两个描述字符串容易混淆,人们可能会争辩说NSNull应该有一个针对它的错误,以使其更加清晰.