objective-c - 在 viewDidUnload 中释放对象?

标签 objective-c ios ios4 memory-management

在我的应用程序中,我正在调用 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/

相关文章:

iphone - 旧图像仍然显示在 TableViewCell 中

ios - 将 Swift 集成到导出的 Unity 项目中而不是使用 Objective C?

ios - 通过 topviewcontroller 在自定义类上设置委托(delegate)的简洁方法

ios - NSFileManager 在文件夹中搜索图像文件

ios - 给 uiview, iOS 的约束后框架没有重置

ios - 如何使用新的XCode获得iOS 4 SDK?

ios - MPMoviePlayerController.view 未从 super View 中删除

iphone - 你能在不同的边上设置不同的 CALayer 边框宽度吗?

ios - UISearchController 无法识别元音变音、Swift、iOS

ios - 从 NSDictionary 检索键/值对会导致数据不正确并且还会崩溃