我是新的Objective-C,我想了解內存管理是否正確。什麼時候釋放了一個自動釋放的對象?
通過蘋果閱讀優秀
Memory Management Programming Guide for Cocoa後,我唯一擔心的是,當 實際上是一個自動釋放的對象在iPhone/iPod的應用程序發佈。我的理解是在運行循環的末尾。但是什麼定義了應用程序中的運行循環?
所以我想知道下面的一段代碼是否正確。假設一個物體
@implementation Test
- (NSString *) functionA {
NSString *stringA;
stringA = [[[NSString alloc] initWithString:@"Hello"] autorelease]
return stringA;
}
- (NSString *) functionB {
NSString *stringB;
stringB = [self functionA];
return stringB;
}
- (NSString *) functionC {
NSString *stringC;
stringC = [self functionB];
return stringC;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString* p = [self functionC];
NSLog(@"string is %@",p);
}
@end
此代碼是否有效?
從蘋果的文字我明白的NSString返回從泛函是在functionB範圍內有效。我不確定它是否在函數C和viewDidLoad中有效。
謝謝!
我是否正確理解如果我沒有創建任何autorelease池,所有自動發佈的變量都將保留在內存中直到應用程序未關閉? – Burjua 2011-02-24 20:30:26
類型,系統框架在UIApplicationMain()方法的主線程堆棧頂部爲您創建一些自動釋放池。但是,如果您創建了自己的線程,並且沒有創建池,那麼是的,這些對象會泄漏。在這種情況下,autorelease方法會記錄到控制檯。 – 2011-02-24 21:00:54
好的,謝謝,但這很奇怪,使用返回自動釋放對象並且不釋放它們的構造函數是正常的做法,但它實際上與有內存泄漏(分配內存直到應用程序關閉)相同。或者我不明白什麼? – Burjua 2011-02-24 21:47:22