在使用子类NSView关闭时执行操作



我得到了一个自定义的NSView,它可以绘制一些图形,我使用一个结构来保留我的动画球的属性,在那个结构中,我得到了CGColorRef,因为ARC禁止我在结构中有obj-c对象。

现在的问题是,当我关闭应用程序时,我将如何释放CGColorCreateGenericWithRed函数,而棘手的部分是,我希望NSView子类是"自包含的",我的意思是,我不想引用AppDelegate类中的子类。

我已经查看了Apple Developer文档,但NSView似乎对其发布和/或父窗口的处理没有反应,考虑到这一点,我认为我会有一个泄漏的CGColorRef,当然,我会再次假设它将在应用程序关闭时收集,并且在一天结束时不会造成任何伤害。

所以重复一遍,我想知道如何从子类NSView中释放我的CGColorRef,而不必在NSView子类之外公开结构

感谢

在子类NSView中,您必须添加以下两种方法中的一种:

圆弧:

- (void)dealloc
{
   //Release CGColorRef
}

非ARC:

- (void)dealloc
{
   //Release CGColorRef
   [super dealloc];
}

您可以像ARC之前一样发布它-添加dealloc方法。在ARC下,您不包括[super dealloc],但在其他方面是一样的。

从过渡到ARC发行说明

如果您需要管理除释放实例变量之外的资源,则可以实现dealloc方法。您不必(实际上不能)释放实例变量,但可能需要对系统类和其他未使用ARC编译的代码调用[systemClassInstance setDelegate:nil]。

ARC中的自定义解除锁定方法不需要调用[super-dealloc](这实际上会导致编译器错误)。到super的链接是自动的,并由编译器强制执行。

您仍然可以将CFRetain、CFRelease和其他相关功能与Core Foundation样式的对象一起使用(请参阅"管理免费桥接")。

最新更新