2012-07-18 41 views
0

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

這是怎麼回事?

+0

不是很清楚這件事,但我碰巧看到'initWithObjects:@「4」,「5」,nil]'...你有沒有在''5'之前丟失'@' '? – Kjuly 2012-07-18 14:20:06

回答

2

試試這個:

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

第二個對象必須是@ 「5」,不只是「5」

+0

哦!好的趕上!謝謝。多麼愚蠢的錯誤。 – huggie 2012-07-18 14:22:57

+0

大聲笑必須等6分鐘才能接受答案。 – huggie 2012-07-18 14:23:38

0

我想這是因爲你忘記了字符串「5」中的@。它應該是:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil]; 
相關問題