2011-02-01 100 views
0

大家好(對不起,我的英語)。我是新的客觀C和iOS編程。你可以幫我嗎?iOS中的內存管理

@interface RootViewController : UITableViewController 
{ 
    NSMutableArray *keysFromQuery; 
} 

@property (nonatomic, retain) NSMutableArray *keysFromQuery; 
.... 
.... 
NSString *category = [keysFromQuery objectAtIndex:0]; 

將與[keysFromQuery objectAtIndex:0]發生什麼,如果我這樣做:類發佈] ;?

如果我在之後做了類別會發生什麼:[keysFromQuery release];?

我不太清楚引用和內存機制是如何工作的。

謝謝!

回答

3

不要致電-releasecategory。你不擁有這個物體。您只能通過NARC(new/alloc/retain/copy)釋放您擁有所有權的對象。欲瞭解更多信息,請閱讀Memory Management Programming Guide

0

如果返回對象的方法沒有明確聲明它返回「新」,「保留」ed,「alloc」ed,「創建」或「複製」對象,則不得釋放它。就這麼簡單。

所以,做一個釋放(或自動釋放)僅適用於情況下,像

[object retain]; 
[object copy]; 
[SomeClass newInstanceWithProperty: @"a"]; 
[[SomeClass alloc] initWithProperty: @"a"]; 

等。在這種情況下

所以,你不必做任何事情,「釋放」你提到會很有可能會崩潰你的應用程序。

+0

+ [keysFromQuery release]之後,從容器(類別字符串)獲得的對象引用將變爲無效。 – 2011-02-01 22:16:12

0

如果我這樣做[keysFromQuery objectAtIndex:0]將會發生什麼:[category release];? 你不應該那樣做,因爲它是一個自動釋放的對象。

如果我在之後做了類別會發生什麼:[keysFromQuery release];? 當初始化後釋放keysFromQuery時,NSString仍然保存。

0

不要釋放對象,因爲你不擁有它們,而你甚至沒有分配它們。