嘿,我只是試圖讓事情100%清楚在我的腦海,關於iPhone的內存管理,我很確定我有一個很好的理解,雖然我不是100 %自信。瞭解@property內存管理
讓我們創建一個實例屬性,它是一個的NSArray:
@interface ExampleAppDelegate : NSObject {
NSArray *myArray;
}
@property (nonatomic,retain) NSArray *myArray;
然後合成屬性,以便我們可以使用getter和setter方法:
@synthesize myArray;
現在,這裏是我得到稍微困惑..說我們在外部類創建一個數組,並將其分配給我們的代表myArray:
appDelegate = (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate];
NSArray *exampleArray = [[NSArray alloc] init];
appDelegate.myArray = exampleArray;
[exampleArray release];
現在我們已經爲myArray分配了一個保留計數爲1,因爲它已經佔用了分配的exampleArray,因爲這樣我們將需要在委託dealloc內部調用release來讓myArray在代理被銷燬時不泄漏:
-(void)dealloc {
[super dealloc];
[myArray release];
}
雖然如果我是分配myArray的,像這樣:
appDelegate = (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate];
NSArray *exampleArray = [NSArray arrayWithObject:[NSString stringWithFormat:@"Hello world"]];
appDelegate.myArray = exampleArray;
我就不是必需的,因爲內存管理是爲我處理,這樣做會在釋放分配給myArray的對象調用[myArray release];
中的dealloc ?
''[super dealloc]''應該是你的''dealloc''方法中的最後一個。 XCode很可能會抱怨,如果它不是最後一個。 – 2011-03-17 16:33:02
感謝您的指點,我一直認爲這是無關緊要的 – Alex 2011-03-17 16:57:13