0

如果我有一個NSMutableArrayNSMutableDictionary並把它傳遞到方法一拉:將一個NSMutableArray或NSMutableDictionary傳遞給一個方法 - 可以添加到它嗎?

-(void)addToThisArray:(NSMutableArray *)theMutableArray 
{ 
    [theMutableArray addObject:@"test"]; 
} 

,並調用它像:

NSMutableArray *theMutableArrayToPass = [[NSMutableArray alloc] init]; 
[theMutableArrayToPass addObject:@"2"]; 
[self addToThisArray:theMutableArrayToPass]; 

這是改變的NSMutableArrayNSMutableDictionary有效的方法是什麼?當然,我會比這個例子對數組/字典做更多的事情,但我習慣Perl,而且我們一直都是通過引用傳遞的。

回答

6

是的,objective-c也總是通過對象的引用。

由於這個答案是寫的,現在有一個例外,雖然它是一個實現細節,並沒有改變索賠的實際細節。

標記指針是在技術上傳值,因爲引用是真正的數據。根據定義,它們也是不可變的,這就是爲什麼這是一個沒有實際影響的實現細節。

+0

太棒了。我有一個內存泄漏問題,並試圖追查它。我只是想確保當我這樣做時,我沒有複製整個數組/字典並添加到它 - 從而以某種方式將其未使用的內存加倍。謝謝! ARGHHH!我再接受11分鐘的答覆。我會這樣做,當stackoverflow允許我。再次,謝謝! – Jann

+0

搜索「bbum heapshot analysis」並閱讀我寫的關於使用Heapshot分析追蹤記憶增長的文章。它很可能會很快地解決你的記憶增長問題。祝你好運! – bbum

+0

哦,我的天啊!我讀了你的文章,這讓我想到了autorelease池。所以,我把它放在一個'NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];''[pool release]'裏面,它從1.5G變成了29MB!感謝您帶領我朝着幫助我解決問題的方向前進。我*討厭*範圍相關的autorelease錯誤。 (即使他們是我自己的 - 我應該知道的!)+2在這一個。一個用於幫助我處理byRef問題......另一個是通過引導我回答一個問題,讓我整夜摸索着自己的腦袋! – Jann

相關問題