我有定制的视图层次结构。每个视图保留其子级。
除了父母,没有其他人保留观点。
当为视图调用dealloc时,它将调用[children release]。
当我想破坏视图并删除相关资源时,
我打电话:

[mainView release];
[resourceManager deleteRelatedResources];

在大多数情况下,它运行良好,调用顺序为:
  • mainView解除分配;
  • mainView的子项的dealloc;
  • mainView的孙子代的dealloc等。
  • deleteRelatedResources

  • 但是有时候(大约1%的时间),我还有另一份订单:
  • mainView解除分配;
  • deleteRelatedResources
  • mainView的子项的dealloc;
  • mainView的孙子代的dealloc等;

  • 我发现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/

    10-12 00:59