我已经设法让自己对内存管理的某些元素感到困惑。我对于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