为什么我的代码坏了? (NSMutableArray问题)

时间:2013-04-22 17:26:04

标签: objective-c

以下代码中断,返回'(lldb)':

NSMutableArray *numbersArray;

numbersArray = [[NSMutableArray alloc] init];

for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}
int r = rand()%34;

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
}

为什么会这样?

1 个答案:

答案 0 :(得分:6)

您没有初始化阵列(第1行)并指向未使用的内存。它应该是

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

您所做的与指向安全的nil不同。如果你愿意的话

NSMutableArray *numbersArray = nil;

你会看到数组总是空的,因为它向nil发送了一条消息,导致没有任何事情发生(比如向nil添加对象不做什么都没有。)


更新(编辑后):

您的代码运行正常。你可能只是没有得到它的功能。

您的前几行创建了一个包含34个值-1

的数组
NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}

然后随机化一个0到33之间的积分值

int r = rand()%34;

然后“while”所有-1的数组包含该数字,你随机化一个新数字。

由于你的第一个数字为正数且数组中的所有数字都是-1,所以你永远不会进入循环体,所以你的代码只是跨过它。

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
} 

我真的不明白你要做什么,但这正是你的代码目前正在做的事情。 (它有效,但毫无意义)