我得到了一个自定义的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样式的对象一起使用(请参阅"管理免费桥接")。