如果我想要一个NSNull
对象,我通常使用[NSNull new
],但今天我注意到NSNull
类提供了一个类方法[NSNull null]
来创建NSNull
对象.
我想知道[NSNull new]
和[NSNull null]
之间的区别是什么?用[NSNull new]
来创建NSNull
对象是错误的方式吗?
如果我想要一个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;
注意它们是如何指向完全相同的位置的