2012-02-13 3 views
6

Sto usando la funzione CFSTR per creare CFString dalla costante c string e sto chiamando questa funzione molto frequentemente nel mio Daemon.Gestione memoria CFSTR

Da documentation:
Un valore restituito da CFSTR ha la seguente semantica:

  1. valori restituiti da CFSTR non sono rilasciati da CFString-sono garantita valida finché il programma termina.
  2. È possibile conservare e rilasciare i valori restituiti da CFSTR in modo bilanciato, ad esempio qualsiasi altro CFString, ma non è obbligatorio farlo.

Devo utilizzare conservare e rilasciare?

risposta

11

Come indica la documentazione, le stringhe create da CFSTR() rimangono valide fino alla fine del programma. Puoi rilasciarli tutto il giorno, ma in realtà non saranno deallocati. Per questo motivo, non è necessario conservarli/rilasciarli esplicitamente. È valido conservarli/rilasciarli perché altrimenti non è possibile passarli attraverso altri codici che li mantengono/li rilascia (metodi di framework, ecc.). Trattali come se fossero letterali NSString creati usando @"", vale a dire, non è necessario conservarli o rilasciarli dopo la creazione, ma se stai scrivendo codice che può prendere qualsiasi CFString, devi seguire le normali regole di gestione della memoria, incluso l'uso CFRetain() e CFRelease().

+0

Sto usando questo nel mio demone e chiamando questa funzione molto frequentemente, quindi dovrei usare qualche altra funzione? –

+0

Sei preoccupato per le prestazioni, l'utilizzo della memoria o? Ad ogni modo, non dovresti essere prematuramente ottimizzando. Se stai riscontrando problemi di prestazioni o di utilizzo della memoria, è il momento di dare un profilo al codice e capire come migliorarlo. –