Запуск статический анализатор на этот кусок кода:мусора из ядра фонда объектов
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)matchStyle autorelease];
}
дает следующее предупреждение:
вызов функции «CFPreferencesCopyAppValue» возвращает объект ядра Foundation с +1 сохранить счет (владеющий ссылкой). Объекты 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];
}
или это просто ложный положительный результат, учитывая, что скопированный объект бесплатный мостиком?
Вместо литья CFMakeCollectable() используйте NSMakeCollectable(). Но кроме того, ответ Керрюа верен. См. Также: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html –
CFMakeCollectable просто CFRelease - это объект CF. Поскольку объект был выделен из зоны GC, сборщик всегда будет управлять объектами CF с 0-удержанием. (Детали выполнения, но ... там у вас есть) – bbum