【发布时间】:2011-04-10 14:12:55
【问题描述】:
当另一个 ViewController 来来去去时,我遇到了一个奇怪的问题,即 tableview 显示 (null)。我追踪到它读取数据以显示到 tableview 的地方,发现它读取的数据为 null。要对此进行调试,我需要了解内存管理对 iPhone 的真正作用。我在我的应用程序委托中使用了以下代码来创建对象数组。这是来自我为我的应用程序修改的示例代码。我的问题是,当创建这样的数组时,[tempArray release] 是否真的会释放刚刚创建的数组?
//Initialize the hardware array.
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
self.hardwareArray = tempArray;
[tempArray release];
这种类型的代码在 iPhone 上似乎很常见。例如,教程一直在说,现在您将数据传递给控制器,您可以释放它。但是我的 C 和 C++ 经验告诉我,如果你释放内存,它就会消失,如果它的地址位于堆栈上的某个位置,那就不好了。是数据被复制到另一个地方而不是地址被传递?
此外,在像下面这样的设置例程中释放内存时,我是否应该在释放它之前检查 modleName 是否不为零。如果一个已发布的 modelName 已经为 nil 会怎样?
-(void) setModelName:(NSString *)newValue {
self.isDirty = YES;
[modelName release];
modelName = [newValue copy];
}
【问题讨论】:
标签: objective-c ios4