initWithObjects上的NSMutableArray EXEC_BAD_ACCESS
问题描述:
在启用ARC的Objective-c中以下是否合法?initWithObjects上的NSMutableArray EXEC_BAD_ACCESS
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];
我认为应该是。但是,在这种情况下,它会在第四行给我EXEC_BAD_ACCESS:
NSMutableArray * bigArray = [[NSMutableArray alloc] init];
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
[bigArray addObject: smallArray];
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];
addObject将指针向右复制?所以如果我给smallArray分配一段新的内存来指出,那有什么问题呢?
但是这个代码段不会崩溃:
NSMutableArray * bigArray = [[NSMutableArray alloc] init];
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
[bigArray addObject: smallArray];
smallArray = [[NSMutableArray alloc] init];
[smallArray addObject:@"4"];
[smallArray addObject:@"5"];
这是怎么回事?
答
我想这是因为你忘记了字符串“5”中的@。它应该是:
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil];
不是很清楚这件事,但我碰巧看到'initWithObjects:@“4”,“5”,nil]'...你有没有在''5'之前丢失'@' '? – Kjuly 2012-07-18 14:20:06