如何在objC中存储一个nil指针数组?

Sni*_*ips 3 objective-c nsmutablearray

我想使用一个指向对象实例的指针数组,但只想在需要时(即懒惰地)创建这些对象的实例.该数组对应于UI中的表,因此每个数组索引对应一个表行.

我想使用NSMutableArray来保存指向对象实例的指针(当用户在UI中选择相应的行时发生).

如果选择表中的行,则检查相应的数组条目.如果指针值为nil,则尚未创建实例,因此在该点创建实例,并且对象指针存储在相应的索引数组条目中.

显然,这要求我最初从一个nil指针数组开始,但是objC不会让我在NSArray中放入一个nil指针.

我不能在创建数组时向对象添加对象,因为数组索引与表行不对应.

什么是最好的objC解决方案?

das*_*ght 7

Objective C中的惯用解决方案是使用NSNull:

NSNull类定义了一个单例对象,用于表示集合对象中的空值(不允许使用nil值).

创建你的NSMutableArray,并用[NSNull null]对象填充它:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:N];
for (int i = 0 ; i != 10 ; [a addObject:[NSNull null]], i++);
Run Code Online (Sandbox Code Playgroud)

当您检查是否存在对象时,请将NSMutableArray索引处的对象与以下对象进行比较[NSNull null]:如果它们相同,则替换为真实对象; 否则,真实物体已经存在.

if ([array objectAtIndex:index] == [NSNull null]) {
    MyRealObject realObject = [[MyRealObject alloc] init];
    [array replaceObjectAtIndex:index withObject:realObject];
}
Run Code Online (Sandbox Code Playgroud)

**编辑摘要**编辑使用循环初始化数组(感谢bbum).