繁体   English   中英

initWithObjects上的NSMutableArray EXEC_BAD_ACCESS

[英]NSMutableArray EXEC_BAD_ACCESS on initWithObjects

在启用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"];

这里发生了什么?

尝试这个:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];

第二个对象必须是@“5” ,而不仅仅是“5”

我想这是因为你忘了字符串“5”中的@。 它应该是:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM