ガベージコレクションされたスクリプト環境を実装するCライブラリを使用するObjective-Cプロジェクトを維持しています。場合によっては、保持されているObjective-Cオブジェクトをスクリプトオブジェクトのプライベートフィールドに配置する必要があります。次に、Objective-Cオブジェクトがfinalizeコールバックで解放されます。
プライベート値を設定するための呼び出しは、うまくいけば明白なセマンティクスで、次のようになります。
if (!JS_SetPrivate(context, jsSelf, [self retain])) /* handle error */
ファイナライズコールバックはこれを行います:
id object = JS_GetPrivate(context, jsSelf);
if (object != nil)
{
[object clearJSSelf:jsSelf]; // Remove reference to JS wrapper.
[object release]; // JS wrapper owned a reference.
JS_SetPrivate(context, jsSelf, nil);
}
Clang Static Analyzerは、finalizeコールバックでのランダムリリースに異議を唱えませんが、値が最初に設定されている場合、「行Nに割り当てられたオブジェクトのリークの可能性」と表示されます。</ p>
このメッセージを抑制する注釈または醜くないパターンはありますか?(私は、のようなばかげたことをしたくありません。また[object performSelector:@selector(retain)]
、ヘッダー宣言を台無しにしたくないのJS_SetPrivate
です。また、与えられた値JS_SetPrivate
は任意のポインターであり、必ずしもObjective-Cオブジェクトではないことに注意してください。