在我的应用程序中,我正在调用 presentModelViewController 来呈现一个新的 Controller 。每次触发此操作时都会分配内存。但不知何故它没有正确发布,因为在某些时候我的应用程序使用了太多内存并且它崩溃了。
可能这是因为我没有正确释放属性对象(或根本没有)下面提到的方法正确吗? dealloc 可能是,但是 viewDidUnload 呢?
- (void)viewDidUnload {
[_sushiTypes release];
_sushiTypes = nil;
}
- (void)dealloc {
[_sushiTypes release];
_sushiTypes = nil;
[super dealloc];
}
最佳答案
不要忘记在 viewDidUnload 中调用 super。您还应该通过其 setter 访问您的实例变量,以在 viewDidUnload 中将其设置为 nil。在dealloc中,直接释放实例变量即可。
- (void)viewDidUnload {
[super viewDidUnload];
NSLog(@"viewDidUnload being called");
self.sushiTypes = nil;
}
- (void)dealloc {
[_sushiTypes release];
NSLog(@"dealloc being called");
[super dealloc];
}
不过我不认为这是你内存问题的根源。您的模态视图 Controller 是否有任何其他实例变量或 IBOutlets?
为了帮助进一步调试,请尝试使用 Instruments。在 Xcode 中,转到 Product > Profile,然后在 Instruments 打开时选择 Allocations 模板。然后多次打开和关闭模态视图 Controller ,并检查您的泄漏和分配。如果每次呈现/解散时分配都在增长,请尝试在每次呈现/解散之前和之后单击“标记堆”按钮。然后,您可以检查每个周期正在分配和未释放的对象。
关于objective-c - 在 viewDidUnload 中释放对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441579/