使用子类NSView关闭后执行操作

时间:2012-08-31 20:46:00

标签: objective-c cocoa

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

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

我查看了Apple Developer Docs,但似乎NSView没有对其发布和/或处理其父窗口做出反应,考虑到这一点我认为我会泄漏CGColorRef,当然,我会再次假设它将在申请结束时收集,并在一天结束时不会造成任何伤害。

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

谢谢

2 个答案:

答案 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风格的对象一起使用(请参阅“管理免费电话桥接”)。