4
運行在這段代碼靜態分析:垃圾收集對象
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)matchStyle autorelease];
}
產生以下警告:
調用函數「CFPreferencesCopyAppValue」返回一個Core Foundation對象有+1保留計數(擁有參考)。核心基礎對象不會自動收集垃圾。
這是一個警告,我應該事端醜陋這樣的修正:
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
id nsMatchStyle = [(id)matchStyle copy];
if (matchStyle) {
CFRelease(matchStyle);
}
return [nsMatchStyle autorelease];
}
或者這只是一個假陽性,因爲複製的對象是免費電話橋接?
而不是鑄造CFMakeCollectable(),使用NSMakeCollectable()。但除此之外,kperryua的答案是正確的。另請參閱:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html – 2009-09-03 14:58:37
CFMakeCollectable只是CFRelease的CF對象。由於該對象是從GC區域分配的,因此收集器將始終使用0保留計數來管理CF對象。 (實現細節,但是......你有它) – bbum 2009-09-03 15:00:59