【发布时间】:2011-01-14 04:18:46
【问题描述】:
大约 3 个小时后,我终于设法修复了视图控制器中的内存泄漏。泄漏是由 UIPickerView 引起的,该 UIPickerView 在头文件中将其属性设置为“保留”。
以下代码设法修复它:
- (void)viewDidLoad {
[super viewDidLoad];
myPicker = [[[UIPickerView alloc] initWithFrame:CGRectZero]autorelease];
}
- (void)dealloc {
[super dealloc];
[myPicker release];
myPicker = nil;
}
请不要告诉我这段代码有多令人震惊……我知道这很糟糕。我有一个发布,和一个自动发布。问题是,如果我更改或删除上述任何部分,内存泄漏就会返回。
虽然我知道客观的 C 内存管理是如何工作的,但显然不知道......
为什么上面的代码修复了内存泄漏,正确版本的代码是什么样的?
-
编辑:
如果有人遇到同样的问题或感兴趣 - 问题是我班级中的其他对象之一被设置为“保留”而不是“分配”。 (如果你不拥有一个对象,它应该有属性分配,而不是保留)。
就像 Cannondale 所说,删除额外的保留可以解决所有问题,并且只需要一个版本。
【问题讨论】:
-
很高兴听到您将其整理出来。不错的一个:)
标签: iphone objective-c memory-management