我有定制的视图层次结构。每个视图保留其子级。
除了父母,没有其他人保留观点。
当为视图调用dealloc时,它将调用[children release]。
当我想破坏视图并删除相关资源时,
我打电话:
[mainView release];
[resourceManager deleteRelatedResources];
在大多数情况下,它运行良好,调用顺序为:
但是有时候(大约1%的时间),我还有另一份订单:
我发现recommendation from Apple不依赖dealloc调用资源管理。确实可以在[儿童释放]之后立即调用取消儿童观点的分配吗?有什么解决方法吗? (我的项目太过复杂,无法更改资源管理方案)。
最佳答案
dealloc
调用的顺序不确定。如果您的代码在不同类之间的dealloc
的实现中具有顺序依赖性,请考虑该代码已损坏。
当然,存在一些变通办法,您可以尽力尝试并保证顺序。但是没有解决方法可以证明是子弹头,而您只会更深入地挖掘这个漏洞。
您唯一可以假设的是,在A的dealloc
中释放的对象将始终在A之后被释放。您无法确定。
(一个问题是,任何对象都可以随时自由地被retain/autorelease
d转换。)
一种可能的快速解决方案是添加一个无效模式。也就是说,通过在所有类中使用依赖的资源管理来实现一个方法,从而控制资源的调用,从而从dealloc
中移出资源。
然后,您可以执行以下操作:
[myObject invalidateAllResources]; // traverses object graph, in order, invalidating resources
[myObject release]; // do the normal release-maybe-dealloc dance
关于ios - 取消分配调用顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14587985/