为什么这个数组为对象计数返回0?

时间:2013-03-14 01:39:42

标签: ios objective-c nsarray

我的阵列:

NSMutableArray *squareLocations;

CGPoint dotOne = CGPointMake(1, 1);
[squareLocations addObject:[NSValue valueWithCGPoint:dotOne]];

CGPoint dotTwo = CGPointMake(10, 10);
[squareLocations addObject:[NSValue valueWithCGPoint:dotTwo]];

CGPoint dotThree = CGPointMake(100, 100);
[squareLocations addObject:[NSValue valueWithCGPoint:dotThree]];

int num = [squareLocations count];

for (int i = 0; i < num; i++)
{
    NSValue *pointLocation = [squareLocations objectAtIndex:i];
    NSLog(@"%@", pointLocation);
}

当我问squareLoctions对象计数时,它返回零?但就在上面要求计数我添加了三个NSValue对象???有人有什么想法吗?

2 个答案:

答案 0 :(得分:7)

您需要先初始化数组

NSMutableArray *squareLocations = [[NSMutableArray alloc] init];

答案 1 :(得分:3)

该数组正在返回0,因为实际上并没有询问数组的大小。

您假定为数组的对象既未分配,也未正确初始化。

您正在询问当前初始化为nil的实例。有趣的是它不会崩溃,因为Objective-C允许你调用nil实例上的任何方法(选择器)(好吧,这个术语不安静)。只是,这些nil个实例将始终返回0NO0.0f0.0nil,具体取决于要求时的预期类型他们的回报值。换句话说,它总是返回一个值,当它被转换为期望的类型时,将被设置为零。


要解决该问题,您需要为变量分配,初始化和分配NSMutableArray的实例。

可以使用正确的allocinit方法组合完成:

NSMutableArray *squareLocations = [[NSMutableArray alloc] init];

或者您可以使用其中一个便捷构造函数,例如:

NSMutableArray *squareLocations = [NSMutableArray array];

下次遇到这种奇怪的行为时,请先检查相关实例是否不是nil