在启用ARC的Objective-c中,以下是否合法?
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"];
这里发生了什么?
答案 0 :(得分:2)
试试这个:
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];
第二个对象必须是 @“5”,而不仅仅是“5”。
答案 1 :(得分:0)
我想这是因为你忘记了字符串“5”中的@。它应该是:
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil];