如何检测数组是否为空?

Ale*_*lea 2 arrays iphone objective-c

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

更新

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

array = [[NSMutableArray alloc]init];
Run Code Online (Sandbox Code Playgroud)

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

array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 6

如果您声明它但根本没有分配任何东西:

NSMutableArray *array;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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