我有一个自定义NSView
做了一些绘图,我用一个结构来保存我的动画球的属性,在那个结构中我得到了一个CGColorRef
,因为ARC禁止我有obj-c结构中的对象。
现在问题是当我关闭我的应用程序时如何释放我的CGColorCreateGenericWithRed
函数,而棘手的部分是,我希望NSView
子类是“自包含”的,我的意思是我不想从我的AppDelegate
类引用子类。
我查看了Apple Developer Docs,但似乎NSView
没有对其发布和/或处理其父窗口做出反应,考虑到这一点我认为我会泄漏CGColorRef
,当然,我会再次假设它将在申请结束时收集,并在一天结束时不会造成任何伤害。
所以重复一遍,我想知道如何从子类CGColorRef
释放NSView
,而不必在NSView
子类之外公开结构。
谢谢
答案 0 :(得分:1)
在Subclassed NSView中,您必须添加以下两种方法中的一种:
ARC:
- (void)dealloc
{
//Release CGColorRef
}
非ARC:
- (void)dealloc
{
//Release CGColorRef
[super dealloc];
}
答案 1 :(得分:0)
您可以像在ARC之前的日子一样释放它 - 添加dealloc
方法。在ARC下,您不包括[super dealloc]
,但不包括{。}}。
来自Transitioning to ARC Release Notes
如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法。您不必(实际上您不能)释放实例变量,但您可能需要在系统类和未使用ARC编译的其他代码上调用[systemClassInstance setDelegate:nil]。
ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误)。链接到super是由编译器自动执行的。
您仍然可以将CFRetain,CFRelease和其他相关功能与Core Foundation风格的对象一起使用(请参阅“管理免费电话桥接”)。