释放所有保留属性的简写方法?

时间:2011-02-17 05:30:48

标签: objective-c memory-management properties

我们都知道对象的属性应该通过其dealloc方法释放,但是对于具有许多属性的对象,这通常非常麻烦。特别是当添加或删除新属性以记住返回dealloc以及添加和删除释放调用时,这是一种令人头疼的问题。

是否有任何方法可以一般性地释放所有对象的属性?在查看文档时我无法找到任何内容,但是如果它尚未实现,可以通过反射来完成吗?

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

2 个答案:

答案 0 :(得分:1)

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

然而,长话短说,我已经停止使用它了,因为我无法解释这些非常古怪的问题。我不确定这是什么导致它,但它似乎足够聪明,它会有某种令人讨厌的,无法预见的副作用。

所以,回答你的问题:这绝对是可能的,但我建议你不要。尽可能使用垃圾收集! :)

答案 1 :(得分:-1)

除非你可以打开垃圾收集,否则你可以选择两个选项。正如您所建议的那样,您可以将所有属性引用填充到单个NSDictionary(您将在-dealloc中发布)。否则你会被困在通常的状态。

您可以在Objective-C 2.0 here中看到有关垃圾收集的更多信息。