这是什么(NSNull *)控制器== [NSNull null]应该做什么?为什么不只是控制器==零?

时间:2009-05-13 21:48:56

标签: iphone cocoa-touch uikit

在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表示“无”。请帮助我在这里得到清晰的图片!

2 个答案:

答案 0 :(得分:12)

大多数容器不允许在其中插入“nil”对象。如果你真的想在容器中插入一个空值,可以使用NSNull实例(NSNull是一个单例)。

在您的特定示例中,控制器是从数组中获取的。然后,确保对象不是NSNull实例是一种好习惯。

答案 1 :(得分:1)

NSArrayNSDictionary等集合类不能包含nil个值。你的ivar viewController是一个集合类的实例。 NSNULL专门创建为nil的占位符,您可以将其放入集合类中。

NSNull类定义了一个单例对象,这意味着只有NSNull的单个实例(使用[NSNull null]创建),但它可以用于多个你想要的地方。