5

CFDataRefbyを返すとき

(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return data;
}

メモリ リークがありますCFDataRef。自動解放を行う方法は? メソッド [data autorelease] は終了しません。

4

2 に答える 2

8

Core Foundation オブジェクトを自動解放することはできません。(ただし、CFDataRef などの無料のブリッジングをサポートする Core Foundation オブジェクトを自動解放することはできます。以下の @newacct の回答を参照してください。)

newObjective-C の慣例では、呼び出し元が戻り値を解放する責任があることを示す単語で始まるようにメソッドに名前を付けます。例えば:

+ (CFDataRef)newDataRef {
    return CFDataCreate(...);
}

CFDataRef myDataRef = [self newDataRef];
...
CFRelease(myDataRef);

この命名規則に従うと、Xcode 静的アナライザーは Core Foundation のメモリ管理の問題に正しくフラグを立てます。

于 2011-11-21T08:14:11.857 に答える
3

CFDataRef を自動解放する方法は? メソッド [data autorelease] は終了しません。

を呼び出すには、オブジェクト ポインター型にキャストするだけautoreleaseです。

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}
于 2012-09-26T06:48:28.870 に答える