1

描画を行うカスタムを取得しNSView、構造体を使用してアニメーションボールのプロパティを保持します。その構造体では、CGColorRefARCが構造体内にobj-cオブジェクトを含めることを禁止しているため取得しました。

CGColorCreateGenericWithRedここで問題となるのは、アプリケーションを閉じたときに関数をどのように解放するかということです。注意が必要なのは、NSViewサブクラスを「自己完結型」にしたいということです。つまり、クラスからサブクラスを参照したくないということですAppDelegate

私はAppleDeveloperDocsを調べましたが、NSViewそのリリースや親ウィンドウの破棄には反応しないようです。そのことを念頭に置いて、リークが発生すると思いますCGColorRef。もちろん、もう一度想定します。アプリケーションが閉じられたときに収集され、1日の終わりに害を及ぼすことはありません。

繰り返しになりますが、サブクラスの外部に構造体を公開せずにCGColorRef、サブクラスから自分を解放する方法を知りたいと思います。NSViewNSView

ありがとう

4

2 に答える 2

1

サブクラス化された NSView では、次の 2 つのメソッドのうちの 1 つを追加する必要があります。

アーク:

- (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] を呼び出す必要はありません (実際にはコンパイラ エラーが発生します)。スーパーへの連鎖は、コンパイラによって自動化され、強制されます。

CFRetain、CFRelease、およびその他の関連関数を Core Foundation スタイルのオブジェクトで引き続き使用できます (「トールフリー ブリッジングの管理」を参照)。

于 2012-08-31T21:34:27.083 に答える