1

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

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

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

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

谢谢

4

2 回答 2

1

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

弧:

- (void)dealloc
{
   //Release CGColorRef
}

非 ARC:

- (void)dealloc
{
   //Release CGColorRef
   [super dealloc];
}
于 2012-08-31T22:00:40.493 回答
0

您可以像在 ARC 之前的日子一样发布它 - 添加一个dealloc方法。在 ARC 下,您不包括在内[super dealloc],但除此之外它是相同的。

过渡到 ARC 发行说明

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

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

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

于 2012-08-31T21:34:27.083 回答