Aar*_*man 1 iphone objective-c ios automatic-ref-counting
我有一个看起来像UIViewController的奇怪(非?)问题.看起来控制器在取消分配时不会释放其子视图.我将NSLog消息放在所有子视图的dealloc方法以及视图控制器中.视图控制器dealloc被调用,但子视图没有.但是,如果我然后将该视图控制器的另一个实例推送到导航堆栈,则会显示之前实例的所有子视图都会被释放(我在控制台中收到一堆NSLog消息让我知道).我已经检查过,并且我没有单独引用显示视图控制器中的自定义视图控制器(正在进行推送的控制器).
一个小的(可能)细节:自定义视图控制器确实接收它存储的块,然后在弹出之前执行.但是,我确实发送了nil并且我得到了同样的行为.另外,当弹出堆栈时,呈现视图控制器会释放dealloc,因此没有保留周期.
此外,我确实尝试在自定义视图控制器的dealloc方法中显式释放每个视图.相同的行为.
导航控制器是否可能坚持下去?它似乎不会对我的任何其他视图控制器执行此操作.
我的问题是,这确实代表了内存泄漏(所有这些子视图); 虽然泄漏没有堆积,但它仍然是泄漏.
好的,这很尴尬.我确实在另一个类(称为ViewDef)中发现了问题,我无意中将其用作集合类.当我第一次搞清楚一些动画时(几个月前),这是一种快速而肮脏的方式来跟踪我的子视图.ViewDef存储了从数据库中检索到的frame/font/color/etc信息,因此在计算动画时(在方向之间)也可以方便地存储视图.这些ViewDef由我的模型存储并传递,因此当然也保留了视图(稍后由另一个视图控制器替换).无论如何,我忘了在我的代码中插入警告以便稍后解决此问题.
故事的道德:如果你计划做一些愚蠢的事情,至少记录你的愚蠢,这样你就不必在以后通过互联网进行广播.
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |