如何检测数组是否为空?

时间:2010-09-05 17:27:47

标签: iphone objective-c arrays

我正在尝试检测数组是否为空,以便能够进行某个调用。 我尝试使用if (![array ==nil]),但不能编译。 我相信对此有一个非常简单的解释。

更新

如果数组为空,我想这样做:

array = [[NSMutableArray alloc]init];

如果它有一个对象,我想这样做:

array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];

4 个答案:

答案 0 :(得分:6)

如果您声明了它,但根本没有指定任何内容:

NSMutableArray *array;

然后数组将是nil,这意味着它根本不存在,所以你不能说它是否为空,所以你不能检查任何东西。

如果您 分配了某些内容,并且您想要查明现有数组是否为空,那将取决于您首先创建它的方式。

  • 如果数组是通过某种方便方法分配的,那么它是自动释放的,所以只需这样做:

    if ([array count] == 0) {
        array = [[NSMutableArray alloc] init];
    } else {
        array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
    }
    
  • 如果数组是从init或copy方法分配的,或者之前已保留过,请将计数存储在临时变量中,释放数组并使用临时变量来决定要执行的操作:

    NSInteger count = [array count];
    [array release];
    
    if (count == 0) {
        array = [[NSMutableArray alloc] init];
    } else {
        array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
    }
    

答案 1 :(得分:1)

在你的情况下,我总是使用没有差异

array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];

并在程序启动时立即将用户默认值中的默认值设置为空数组,然后再访问默认值(来自Apple的示例):

+ (void)initialize{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary *appDefaults = [NSDictionary
        dictionaryWithObject:[NSArray array] forKey:@"MyFavorites"];

    [defaults registerDefaults:appDefaults];
}

请参阅Apple's doc

答案 2 :(得分:0)

假设您正在谈论NSArray,如果myArray未正确分配+初始化(您要检查的内容),则其引用将为nil,因此您可以这样做:

if(myArray) //or even if(myArray != nil) since myArray will be a pointer
{
//properly inizialized
}
else
{
//not properly inited
}

另一方面,如果它已经被引入,你可以通过检查count属性来测试它的空白,该属性返回它包含的元素数量

if([myArray > 0]) 
//there is at least one element
}
else
{
//no elements
}

答案 3 :(得分:0)

你可以使用NSArray的count函数。它也适用于NSMutableArray ......

syntext将是,

int ct = [array count];

ct将包含数组中的项目数。

如果我们空了,它将是零