CFDataRef
byを返すとき
(CFDataRef)MyFunction{
.....
CFDataRef data = CFDataCreate(NULL, buf, bufLen);
free(buf);
return data;
}
メモリ リークがありますCFDataRef
。自動解放を行う方法は? メソッド [data autorelease] は終了しません。
CFDataRef
byを返すとき
(CFDataRef)MyFunction{
.....
CFDataRef data = CFDataCreate(NULL, buf, bufLen);
free(buf);
return data;
}
メモリ リークがありますCFDataRef
。自動解放を行う方法は? メソッド [data autorelease] は終了しません。
Core Foundation オブジェクトを自動解放することはできません。(ただし、CFDataRef などの無料のブリッジングをサポートする Core Foundation オブジェクトを自動解放することはできます。以下の @newacct の回答を参照してください。)
new
Objective-C の慣例では、呼び出し元が戻り値を解放する責任があることを示す単語で始まるようにメソッドに名前を付けます。例えば:
+ (CFDataRef)newDataRef {
return CFDataCreate(...);
}
CFDataRef myDataRef = [self newDataRef];
...
CFRelease(myDataRef);
この命名規則に従うと、Xcode 静的アナライザーは Core Foundation のメモリ管理の問題に正しくフラグを立てます。
CFDataRef を自動解放する方法は? メソッド [data autorelease] は終了しません。
を呼び出すには、オブジェクト ポインター型にキャストするだけautorelease
です。
-(CFDataRef)MyFunction{
.....
CFDataRef data = CFDataCreate(NULL, buf, bufLen);
free(buf);
return (CFDataRef)[(id)data autorelease];
}