在Apple的例子中,我见过这个:
myController *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
controller = [[myController alloc] initWithPageNumber:page];
[viewControllers replaceObjectAtIndex:page withObject:controller];
[controller release];
}
我对这一行非常感兴趣:
if ((NSNull *)controller == [NSNull null]) {
如果我愿意这样做,我会检查是否为零。为什么他们这样做太复杂了?那到底是做什么的?对我来说,看起来他们正在将控制器对象转换为NSNull,然后检查它是否与NSNull中的null相同。
A.F.A.I.K。 nil表示“无对象”,null表示“无”。请帮助我在这里得到清晰的图片!
答案 0 :(得分:12)
大多数容器不允许在其中插入“nil”对象。如果你真的想在容器中插入一个空值,可以使用NSNull实例(NSNull是一个单例)。
在您的特定示例中,控制器是从数组中获取的。然后,确保对象不是NSNull实例是一种好习惯。
答案 1 :(得分:1)
NSArray
和NSDictionary
等集合类不能包含nil
个值。你的ivar viewController
是一个集合类的实例。 NSNULL
专门创建为nil
的占位符,您可以将其放入集合类中。
NSNull
类定义了一个单例对象,这意味着只有NSNull
的单个实例(使用[NSNull null]
创建),但它可以用于多个你想要的地方。