Core Foundationのオブジェクトのガベージコレクション
-
21-09-2019 - |
質問
このコード片に静的アナライザを実行
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)matchStyle autorelease];
}
は次の警告を生成します:
通話機能への「CFPreferencesCopyAppValueは」+1とCore Foundationのオブジェクトは、カウント(参照を所有している)を保持返します。 Core Foundationのオブジェクトが自動的にごみ収集されません。
これは私がそのような醜いのsomethinを修正する必要があります警告しています
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
id nsMatchStyle = [(id)matchStyle copy];
if (matchStyle) {
CFRelease(matchStyle);
}
return [nsMatchStyle autorelease];
}
またはこれは、コピーされたオブジェクトは、フリーダイヤルのブリッジ?
であることを考えると、ちょうど偽陽性であります解決
これを試してみてください
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)CFMakeCollectable(matchStyle) autorelease];
}
CFMakeCollectable
はにObjCのCFRetain
よりも異なるため、は-retain
ないが、これは、GCに漏れます。そのオブジェクトのCFRetain
無効ガベージコレクション、およびそれを有効にするCFMakeCollectable
を必要とします。
所属していません StackOverflow