检测NSView何时被解除分配

时间:2009-07-28 09:02:09

标签: objective-c cocoa memory-management object-lifetime

有没有办法检测NSView何时被解除分配?

原因是,我有一些简单的委托(例如处理-control的NSTextField委托:textView:doCommandBySelector:允许输入返回/制表键)。我想将这个委托对象粘贴在nib中,连接NSTextField的委托连接并让它工作。

它确实有效,但是即使在链接到的NSTextField被释放后,委托也永远不会被释放,因此委托对象会泄漏。

我希望委托对象能够检测NSTextField何时被解除分配,但我想不出任何方法可以做到这一点,这让我不得不存储一个单独的链接到委托对象一些其他控制器并在某些点上手动释放它,这非常不理想。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我以前对此有过很好的了解,并且在取消分配对象时似乎没有任何方法可以观察到。我已经看到了一种在弱指针类中执行此操作的方法,但它涉及isa swizzling,这可能会变得令人讨厌。这是网站:http://www.cocoadev.com/index.pl?WeakPointers

当取消分配nib的所有者时,应该释放从nib文件创建的对象,除非它们保留在其他位置。例如,当取消分配NSWindowController时,它将释放在加载nib时创建的任何对象。如果您的委托对象没有被释放,可能是因为它们被保留在别处,或者存在保留周期。