Spa*_*Dog 3 iphone iphone-sdk-3.0
我有一个可变数组,保留并存储多个对象.在某些时候,一个对象可能变为零.当发生这种情况时,应用程序将崩溃,因为数组不能有nil对象.想象一下
[object1,object2,object3,nil];
那么,object2 = nil
[object1,nil,object3,nil];
这是不可能的,因为nil是数组标记的结尾.那么,我该如何解决呢?谢谢你的帮助.
使用[NSNull null],如果你要存储一个空的占位符对象.
例如:
NSArray * myArray = [NSArray arrayWithObjects:obj1, [NSNull null], obj3, nil];
Run Code Online (Sandbox Code Playgroud)
myArray将包含3个对象.当你检索对象时,你可以做一个简单的指针相等测试,看看它是否是Null单例:
id object = [myArray objectAtIndex:anIndex];
if (object == [NSNull null]) {
//it's the null object
} else {
//it's a normal object
}
Run Code Online (Sandbox Code Playgroud)
编辑(回复评论)
@Mike我认为你对实际发生的事情感到困惑.
如果你有:
id obj = ...;
Run Code Online (Sandbox Code Playgroud)
然后obj包含一个地址.它不包含对象.因此,如果你这样做NSLog(@"%p", obj),它会打印出类似的东西0x1234567890.当你放入obj数组时,它不是复制对象,而是复制对象的地址.所以数组实际上包含了0x1234567890.因此,当您稍后执行:时 obj = nil;,您只会影响数组外部的指针.该数组仍将包含0x1234567890.