2012-03-15 10 views
2

我通過的NSMutableArray自動類型轉換成的NSArray

NSMutableArray *array = [[NSMutableArray alloc]init]; 

和使用的方法componentsSeperatedByString創建一個NSMutableArray對象:作爲

array = [myString componentsSeperatedByString:@"++"]; 

但是當我執行上陣列狀的操作,

[array removeAllObjects]; 

我得到異常像「removeAllObjects無法識別的選擇器發送到instanc E」。

我通過修改代碼就像解決了這個問題,

NSArray *components = [myString componentsSeperatedByString:@"++"]; 



array = [NSMutableArray arrayWithArray:components]; 

,我以後可能會像

[array removeAllObjects]; 

我的疑問是,爲什麼NSMutableArray的automaticaqlly轉換爲NSArray的進行操作?如何避免像這樣的自動類型轉換,以防止異常?在此先感謝....

+0

Ninte oru懷疑.. ..ho。 Da doudt undel ennod chodeeru。 nan parayam nan aaranennum nee arraennum..kettoda..Mundaykkal rakese .. :)) – 2012-05-11 12:55:27

回答

5

。在你的理解有誤Objective-C如何工作。這條線:

NSMutableArray *array = [[NSMutableArray alloc]init]; 

分配和初始化的陣列,且該指針array指向該對象。現在,這一行:

array = [myString componentsSeperatedByString:@"++"]; 

使得array指針指向由componentsSeparatedByString方法返回的新的數組。當你這樣做時,你放棄了對你的可變數組和可變數組的引用,並且如果你不使用ARC,你會創建內存泄漏。

3

這是因爲[myString componentsSeperatedByString:@"++"]返回一個NSArray。你可以嘗試這樣的事情:

array = [[myString componentsSeperatedByString:@"++"] mutableCopy]; 

array = [NSMutableArray arrayWithArray:[myString componentsSeperatedByString:@"++"]]; 
0

它不轉換,數組指針可能的UIButton *如果你喜歡寫東西

array = [self likeThatButton]; 

其中likeThatButton是你的方法返回UIButton *。像往常一樣在Objective C中,NSMutableArray *數組意味着只有Xcode會嘗試分析你的代碼,並建議方便的警告和代碼完成。

0

一個NSMutableArray實例不會被自動轉換。

方法componentsSeperatedByString返回一個NSArray對象。將返回值分配給NSMutableArray-Pointer時,應該會收到編譯器警告。

1

上線

array = [myString componentsSeperatedByString:@"++"]; 

要更換NSMutableArray你一個新的NSArray分配(和泄露您的NSMutableArray嘗試使用這樣的:

NSMutableArray *array = [NSMutableArray arrayWithArray:[myString componentsSeperatedByString:@"++"]]; 
相關問題