我有以下方法:
-(void)testAPIModule {
self.requests = [NSMutableArray array];
NSLog(@"making arrays");
/*(A)*/ id array1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithFloat:2], nil];
/*(B)*/ id array2 = [NSArray arrayWithObjects:[NSNumber numberWithInt:4], [NSNumber numberWithInt:5]];
NSLog(@"made array=%@",array2);
for( ServerRequest *req in self.requests ) {
[Networker sendRequest:req withDelegate:self];
[req release];
}
}
代码按预期运行。
但是,如果我注释掉第 (A) 行或删除它末尾的 ",nil",我会EXC_BAD_ACCESS
在 (B) 行出现错误!根据调试器,错误发生在 +[NSArray arrayWithObjects] 内置构造函数中的 CFRetain 中。
另外,如果我注释掉行 (A) 并注释掉 for(...) 循环,则代码会运行该方法。
这对我来说是非常出乎意料的。我在 (B) 线上做错了什么?为什么会在 (A) 行创建一个完全不同的数组让该方法运行?为什么注释掉 for(...) 循环会阻止它之前的 (B) 行的错误?
有人可以解释这是为什么吗?或者至少给我一些调试建议?我已经验证了该方法只运行一次并且“self”是有效的。