如果我想要一个NSNull对象,我通常使用[NSNull new],但今天我注意到NSNull类提供了一个类方法[NSNull null] 来创建NSNull对象.

我想知道[NSNull new][NSNull null]之间的区别是什么?用[NSNull new]来创建NSNull对象是错误的方式吗?

推荐答案

根据文档,[... new]等于[[... alloc] init],并为从NSObject继承的任何类创建并返回一个新实例.

[NSNull null]是一个单例实例,它总是返回相同的实例,即kCFNull.但是,如果您查看NSNull的文档,您可以看到:

NSNull(本身)是一个单例对象,用于表示不允许空值的集合对象中的空值.

因此,由于NSNull的性质,所有的实例都是相同的:

NSNull* null = [NSNull null];
NSNull* init = [[NSNull alloc] init];
NSNull* new = [NSNull new];
NSNull* kcf = kCFNull;

Demo

注意它们是如何指向完全相同的位置的

Objective-c相关问答推荐

NSString "nil or empty" 判断 - 这完成了吗?

uipageviewcontroller 类在设置多个视图控制器时崩溃

核心数据 - 如何获取具有最大值属性的实体

如何向 UILabel 添加滚动功能

为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器?

iOS performSelectorOnMainThread 有多个参数

获取对 UIApplication 委托的引用

在objective-c / cocoa-touch中是否有一个方便的功能来找到最小的数字?

NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'

如何在另一个视图中获取视图的框架?

[Facebook-iOS-SDK 4.0]如何从FBSDKProfile获取用户邮箱

在 iOS 7 中检测后台应用刷新的用户设置

iOS 7 状态栏与 NavigationBar 冲突

如何在 Objective-C 中创建静态方法?

从 UIPageViewController 中移除视图控制器

Objective-C 中的 alloc、init 和 new

NSManagedObjectContext:异常断点在 save: 方法处停止,但没有日志(log)/崩溃/错误

使用 NSLog 打印 NSData

Xcode:无法判断应用程序包

在 Xcode 中制作 RGB colored颜色