Rya*_*fer 7 memory-management objective-c interface-builder ios
我在应用程序的关键时刻发生了崩溃.但是,崩溃似乎来自一个过度发布的UIView对象(更具体地说是UITableView的标题视图,在本例中是一个UISearch栏).关于这一点的奇怪之处在于它是从nib文件中实例化的.这是崩溃......

我已经设置了我的nib文件,以便与Apple在其中一个示例项目中完全匹配.

我也花时间用NSZombieEnabled和使用Instruments来分析它.但是,为什么会发生这种情况,我仍然无法做出正面或反面.这是保留/释放的配对....

并且在创建UIView对象时暴露堆栈跟踪.

此类错误的常见示例是创建NSError对象并将其分配给autorelease块中的out参数.但是,我不希望UIView看到同样的问题.我也没有在代码中的任何地方看到自动释放块(在主运行循环中保存一个).有关如何解决这个问题的任何想法?
问题是,监听通知或添加 KVO 观察者不会改变观察对象的保留计数。在视图/视图控制器/对象的释放后,似乎会立即发出通知。
您可以更改- (void)dealloc方法以从视图/视图控制器中删除通知/KVO 观察者
通知:
-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
//if you are not using ARC you also have to write
//[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
对于 KVO,请使用方法和您的键路径
- (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath
Run Code Online (Sandbox Code Playgroud)
干杯,尼尔斯
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |