我有一个可变数组,里面存储了多个对象并且被保留。在某些时候,其中的一个对象可能会变成 nil。当这种情况发生时,应用程序将会崩溃,因为数组不能包含 nil 对象。例如:
[object1, object2, object3, nil];
然后,object2 = nil;
[object1, nil, object3, nil];
实际上,这是不可能的,因为 nil 是数组的结束标记。那么,如何解决这个问题呢?感谢各位的帮助。
[object1, object2, object3, nil];
然后,object2 = nil;
[object1, nil, object3, nil];
实际上,这是不可能的,因为 nil 是数组的结束标记。那么,如何解决这个问题呢?感谢各位的帮助。
如果您必须存储一个空占位符对象,请使用[NSNull null]
。
例如:
NSArray * myArray = [NSArray arrayWithObjects:obj1, [NSNull null], obj3, nil];
myArray
将包含3个对象。当您检索对象时,可以进行简单的指针相等性测试,以查看它是否为Null单例:
id object = [myArray objectAtIndex:anIndex];
if (object == [NSNull null]) {
//it's the null object
} else {
//it's a normal object
}
编辑(回复评论)
@Mike,我认为你对实际情况有些混淆。
如果您有:
id obj = ...;
那么obj
包含一个地址,而不是对象。因此,如果您执行NSLog(@"%p", obj)
,它将打印类似于0x1234567890
的内容。当您将obj
放入数组中时,它并没有复制对象,而是复制了对象的地址。因此,该数组实际上包含0x1234567890
。因此,当您稍后执行:obj = nil;
时,您只影响了数组之外的指针。该数组仍将包含0x1234567890
。