簡體   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