2011-11-23 81 views
1

考慮這個例子:指針傳遞的方法和分配一個目的是它

NSMutableArray *aArray; 
[Util doSomeMagic:aArray]; 
[aArray count]; 

- (void)doSomeMagic:(NSMutableArray *)aArray 
{ 
    if(aArray == NULL) 
    { 
     aArray = [[NSMutableArray alloc] init]; 
    } 
    [aArray addObject:@"magic"]; 
    [aArray addObject:@"magic2"]; 
} 

doSomeMagic:方法將在數組中繼續進行。在doSomeMagic:裏面,我可以正確地獲取數組的數量,但是在該方法之外,數組仍然是空的。我如何讓doSomeMagic:方法更改傳入的內容?

回答

2

doSomeMagic:方法需要接收參考陣列,以確保它修改它接收到的對象:

- (void)doSomeMagic:(NSMutableArray *)array 
{ 
    // for example, let's remove the last element in the array 
    [array removeLastObject]; 
} 

我猜你的doSomeMagic:可能是這樣的(這是不行的,因爲它修改了數組的範圍)的副本:

- (void)doSomeMagic:(NSMutableArray *)array 
{ 
    NSMutableArray *newArray = [NSMutableArray arrayWithArray:array]; 
    // for example, let's remove the last element in the array 
    [newArray removeLastObject]; 
} 

編輯:我看到您已加入doSomeMagic:代碼。你需要在這裏瞭解通過引用。既然你調用doSomeMagic:帶有一個nil數組(因爲你聲明aArray沒有設置它指向任何事後),當doSomeMagic:運行它分配一個新的數組爲零,然後該方法返回沒有可見的效果。我建議改變,你調用它的代碼:

NSMutableArray *aArray = [NSMutableArray array]; 
[Util doSomeMagic:aArray]; 
[aArray count]; 

和你doSomeMagic:方法:

- (void)doSomeMagic:(NSMutableArray *)aArray 
{ 
    [aArray addObject:@"magic"]; 
    [aArray addObject:@"magic2"]; 
} 

請記住,因爲我使用的NSMutableArray類array,返回的數組將是在[aArray count];之後自動釋放。最終代碼如下所示:

NSMutableArray *aArray = [[NSMutableArray array] retain]; 
[Util doSomeMagic:aArray]; 
[aArray count]; 
[aArray release]; 
+0

更新的魔術方法.... – DNB5brims

+0

我看到的,是無數組問題...謝謝你,艾倫。 – DNB5brims

+1

沒問題。爲了更好地理解這個問題,我建議你學習「傳遞參考」和「傳值」之間的區別:http://maths.cam.ac.uk/undergrad/catam/ccatsl/manual/node50.html –

0

正如您發現結果數組是不可變的。您需要按引用傳遞它

  • (BOOL)TweakMe:(NSMultableArray **)O { ... }
+0

當我將NSMultableArray *更改爲NSMultableArray **時,例如,我調用o的函數會添加一個對象,它會顯示一條警告,並說實例方法未找到,場景後面會發生什麼? – DNB5brims

相關問題