【问题标题】:How to create a test to ensure no retain-cycle?如何创建测试以确保没有保留周期?
【发布时间】:2014-05-29 12:06:26
【问题描述】:

在我的一个项目中,我有一个相当复杂的数据模型。 我需要一种方法来确保我或其他同事不会创建保留周期,并且我想使用自动化方法。

有没有办法保证所有的“dealloc”方法都被调用?

【问题讨论】:

    标签: objective-c testing automatic-ref-counting


    【解决方案1】:
    【解决方案2】:

    你无法自动测试这些东西。你可以做的事情:

    1. 具有良好的编码标准和程序架构
      良好的架构将防止许多保留周期。
    2. 在块中使用self 时要小心(知道何时使用__weak id self)。
    3. 运行 Instruments 并在应用程序运行时检查泄漏

    【讨论】:

      【解决方案3】:

      如果您想这样做,您需要自己设计和编程。

      例如你可以:

      1. 将“连接”定义为对数据模型中类实例的强引用。
      2. 定义一个协议,该协议提供“连接到”计数方法和一个按索引返回连接的方法提供连接迭代器。
      3. 让数据模型中的每个类都实现此协议。
      4. 现在给出对您的数据模型的引用,这些协议方法为您提供“图”(对象是节点,连接是弧)。实施循环检查算法。

      现在在开发和测试期间在适当的地方运行测试,以检查是否意外引入了循环。

      也许可以通过使用运行时的设施在没有协议的情况下实现这一点,您当然可以给任意实例发现它的 ivar 以及 ivar 是否是对象引用。尽管确定 ivar 是强还是弱,您可能会陷入困境。虽然更普遍,这可能更难实现,但一旦完成......

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        • 1970-01-01
        相关资源
        最近更新 更多