0

ガベージコレクションされたスクリプト環境を実装する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オブジェクトではないことに注意してください。

4

1 に答える 1

2

JS_SetPrivateで新しいNS_CONSUMED属性を使用できます。

http://clang-analyzer.llvm.org/annotations.html#attr_ns_consumed

于 2011-01-27T21:40:50.863 に答える