【问题标题】:Shorthand way of releasing all retained properties?释放所有保留属性的简写方式?
【发布时间】:2011-02-17 05:30:47
【问题描述】:

我们都知道一个对象的属性应该通过它的dealloc方法来释放,但是对于具有许多属性的对象来说,这通常是相当麻烦的。这有点让人头疼,尤其是在添加或删除新属性时要记住返回到 dealloc 并添加和删除发布调用。

是否有任何方法可以通用地释放对象的所有属性?我在查看文档时找不到任何东西,但是如果还没有实现,可以通过反射来完成吗?

我想另一个简单的选择可能是将所有属性放在一个数组或其他容器对象中,然后总是释放容器。还有其他选择吗?

【问题讨论】:

    标签: objective-c memory-management properties


    【解决方案1】:

    我见过一次(甚至用过)。它涉及使用Objective-C Runtime 循环遍历类的属性,检查哪些具有retaincopy 标志,然后将它们设置为nil。然后,您的-dealloc 实现可以简化为[self cleanupProperties] 之类的东西。

    长话短说,但是,由于我无法解释的非常古怪的问题,我已经停止使用它。我不确定这是什么原因造成的,但它似乎足够聪明,以至于它会产生某种令人讨厌的、无法预料的副作用。

    所以,回答您的问题:这绝对是可能的,但我建议您不要这样做。如果可能,请使用垃圾收集! :)

    【讨论】:

      【解决方案2】:

      除非您可以打开垃圾收集,否则您几乎只有两个选择。正如您所建议的,您可以将所有属性引用填充到单个NSDictionary(您将在-dealloc 中发布)。否则你会被它通常的方式卡住。

      你可以在Objective-C 2.0 here看到更多关于垃圾回收的信息。

      【讨论】:

      • 正确! (尽管:请不要使用NSDictionary 的想法,我求求你了)。
      • 同意。 “通常做的方式”是它应该做的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2013-11-13
      • 2011-01-12
      相关资源
      最近更新 更多