我已經設法讓自己對內存管理的某些元素感到困惑。我對於Objective-C和內存管理語言一般都陌生。iOS內存管理:ivars,靜態和NSStrings
我已閱讀內存管理指南,但我仍然對一些事情感到困惑。 1)是否需要清理ivars以及任何對象未保留的方法變量。例如
-(void) someMethod{
int count = 100;
for (int i=0; i <count; i++) {
NSLog(@"Count = %d", i);
}
}
該方法完成後,「count」var會發生什麼變化? 如果一個方法分配了大量的臨時變量,那麼只要它們沒有未發佈,alloc'd對象,那麼這些變量是否會從內存中移除?或者我需要以某種方式將它們設置爲零? 2)如果我有一個靜態變量,例如一個NSString,當類被處理時,我是否必須做任何事情來從內存中移除它?
3)我注意到,NSString的保留計數似乎是2147483647,維基百科告訴我這是32位有符號整數的最大值。
http://en.wikipedia.org/wiki/2147483647
myString retainCount = 2147483647
-(void) someMethod{
NSString *myString = @"testString";
NSLog(@"myString retainCount = %d", [myString retainCount]);
// logs: myString retainCount = 2147483647
}
在方法結束時會發生這種什麼?這個記憶是否被清空了?該字符串不被任何東西引用。我的理解是,NSString的@「」方便方法返回一個自動釋放對象,但無論如何,使用retainCount來自動釋放某些東西的意義何在?在那種情況下,保留或釋放ANY NSString的意義何在?
我很清楚retainCount應該被忽略,但它只是讓我不知道這裏發生了什麼。
4)這是否有這個問題?我知道與NSString相關的內存沒有太多的可寫的地方,但我想成爲一名優秀的內存管理公民,而且我對最佳實踐更感興趣。
實際上2147483647是* signed * 32位整數的最大值。它被Cocoa frammework用來表示一個不能被釋放的常量對象。您創建的普通NSStrings具有更多常規保留計數。 – JeremyP 2010-09-03 21:06:37
感謝您的澄清。問題編輯相應。 – averydev 2010-09-03 21:38:14