garbage collection di oggetti core della Fondazione
-
21-09-2019 - |
Domanda
L'esecuzione del analizzatore statico su questo pezzo di codice:
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)matchStyle autorelease];
}
produce il seguente avviso:
Call to funzione 'CFPreferencesCopyAppValue' restituisce un oggetto Nucleo Fondazione con una (di riferimento possedere) +1 trattenere conteggio. oggetti principali della Fondazione non sono automaticamente garbage collection.
Si tratta di un avvertimento dovrei fissare con qualcosa brutto come che:
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
id nsMatchStyle = [(id)matchStyle copy];
if (matchStyle) {
CFRelease(matchStyle);
}
return [nsMatchStyle autorelease];
}
o è solo un falso positivo, dato che l'oggetto copiato è verde ponte?
Soluzione
Prova questo:
- (id) readForeignPref
{
CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
return [(id)CFMakeCollectable(matchStyle) autorelease];
}
Senza la CFMakeCollectable
, questo perderà in GC, perché un CFRetain
è diverso da un -retain
objC. Una CFRetain
disabilita garbage collection di tale oggetto, e ha bisogno CFMakeCollectable
per abilitarlo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow