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

Objective c 使用子类NSView在关闭时执行操作,objective-c,cocoa,Objective C,Cocoa,我得到了一个自定义的NSView,它可以绘制一些图形,我使用一个结构来保留我的动画球的属性,在这个结构中我得到了一个CGColorRef,因为ARC禁止我在结构中拥有obj-c对象 现在的问题是,当我关闭应用程序时,我将如何释放我的CGColorCreateGenericWithRed函数,而棘手的部分是,我希望NSView子类是“自包含”的,我的意思是我不想引用我的AppDelegate类中的子类 我查看了Apple开发者文档,但似乎NSView在发布和/或处理其父窗口时没有反应,考虑到这一点

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

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

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

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


谢谢

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

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

ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误)。到super的链接是由编译器自动执行的

您仍然可以对核心基础样式对象使用CFRetain、CFRelease和其他相关函数(请参见“管理免费桥接”)


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

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

ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误)。到super的链接是由编译器自动执行的

您仍然可以对核心基础样式对象使用CFRetain、CFRelease和其他相关函数(请参见“管理免费桥接”)


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

弧:

非弧形:

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

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

弧:

非弧形:

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