初始化空数组

时间:2012-12-12 06:37:11

标签: objective-c

在Objective-C中,我需要初始化一个nulls / nil数组(不确定使用哪一个)。

我有这段代码:

    NSMutableArray * ObjectIndex = [[NSMutableArray alloc] initWithCapacity:maxObjectId];

    for ( int i = 0; i < maxObjectId; i++ )
    {
         [ObjectIndex setObject:nil atIndexedSubscript:i];
    }

我收到错误声明该对象不能为零。

我打算使用这个数组来存储某些索引中的对象,留下其他的nil(null?)

后面的代码:

for (Object * obj in objs)
{
    ObjectIndex[obj.ID] = obj;
}

3 个答案:

答案 0 :(得分:3)

这就是NSNull的用途。来自文档:

  

NSNull类定义用于表示null的单例对象   集合对象中的值(不允许使用nil值)。

因此,您可以使用[NSNull null]代替nil填充数组:

for (int i = 0; i < maxObjectId; i++ )
{
     ObjectIndex[i] = [NSNull null];
}

因为[NSNull null]是单例对象,所以可以使用

检查数组条目
if ([ObjectIndex[i] isEqual:[NSNull null]]) {
    // "empty"
}

注意: Objective-C实例变量的名称通常以小写字母开头,因此objectIndex将是一个更好的名称。

答案 1 :(得分:1)

为什么不使用数字作为键的NSMutableDictionary,而不是使用稀疏数组?这样您就不必担心使用空值进行预填充。

或者,如果你真的想使用数组,我建议用addObject:或insertObject:atIndex初始化:

答案 2 :(得分:0)

简单!你可以这样做

NSMutableArray * ObjectIndex = [[NSMutableArray alloc] initWithCapacity: maxObjectId];
for(int i=0 ; i< maxObjectId ; i++) {
    [ObjectIndex addObject:[NSNull null]];
}