【发布时间】:2012-07-11 04:57:24
【问题描述】:
我在 iOS 应用程序中遇到了一个有趣的内存管理问题。
我有一个属性,当使用
[self.propertyName release];释放该属性时,会导致该属性被释放两次,并导致 iPad 1/iOS 4 设备(在属性的 dealloc 中)出现错误的内存访问异常。当此代码更改为
[_propertyName release];(访问局部变量而不是属性)时,这将导致 iPad 3/iOS 5 上的泄漏。
当然,我可以通过检查操作系统版本来阻止这种情况发生,但我想了解我做错了什么。
更多细节:
该属性是UIViewController 的子类,拥有该属性的对象也是如此。我将属性的UIView 添加为子视图。我听说这不是一个好的做法,但我们正在其他地方这样做,没有内存问题。
测试用例是:
iPad 1、iOS 4.2 - 需要使用 ivar
[_propertyName release]发布iPad 2、iOS 5.0 - 需要使用
[self.propertyName release]属性发布iPad 3、iOS 5.1 - 需要使用
[self.propertyName release]属性发布
【问题讨论】:
-
我们需要代码才能继续。显示这个 var 的声明,以及你在哪里释放它。
标签: objective-c ios memory-management memory-leaks