Quando penso a ARC non c'è un sovraccarico di rilascio.
Immagino tu voglia dire "Non devo preoccuparmi di rilascio". C'è spesso un sovraccarico di prestazioni, anche se il compilatore può talvolta ottimizzarlo.
Sebbene le regole ARC siano diverse per NS .. e CF .., c'è qualche motivo specifico per non supportare CF .. in ARC? Oggetti
Molti Fondazione Nucleo sono gestito da ARC, e il numero di essi continua ad aumentare. Puoi sapere se una particolare funzione supporta ARC guardando nell'intestazione per CF_IMPLICIT_BRIDGING_ENABLED
. Se lo vedi, le funzioni restituiscono oggetti CF compatibili con ARC. Ad esempio, in iOS 8 sono state aggiunte all'elenco molte funzioni di grafica principale. (Non voglio esagerare, non sto dicendo che oggi non lo fai oggi su questo CFRelease
. Sto dicendo che sono impostati per essere gestiti da ARC, sono gestiti da ARC in Swift, e essi possono fine essere trattati direttamente nel objC senza bisogno CFRelease
.)
il motivo oggetti CF non sono di default gestiti è che qualcuno ha dovuto passare attraverso e verificare (audit) che ogni funzione è conforme alla Creazione Convenzioni di denominazione delle regole o che siano correttamente annotate per le loro eccezioni. È un lavoro abbastanza noioso, e Apple lo ha diffuso in diverse versioni. Ma dovresti vederlo migliorare nel tempo.
Kazuki è corretto che non è possibile inserire oggetti gestiti da ARC in una struttura o unione, ma questo di solito non influisce su Core Foundation.
BTW, CF_IMPLICIT_BRIDGING_ENABLED
è solo un involucro intorno al pragma clang arc_cf_code_audited
clang. Questo è spiegato nei documenti ARC, 7.8.1 Auditing of C retainable pointer interfaces.
fonte
2014-09-24 22:29:04
So perché ma non ** PERCHÉ ** se questo ha un senso. CF è un framework C reso disponibile per iOS e OS X e il compilatore ARC non può tracciare allocazioni di memoria in esso. Questo è il motivo per cui è necessario rilasciare manualmente le cose. Ma non lo so ** PERCHÉ ** ARC non è in grado di monitorare. Detto questo, questo è parte del motivo per cui Swift è arrivato. Rimuove del tutto la necessità del materiale C. :) – Fogmeister
@Fogmeister: Accetto, ma CF non viene importata come da C? se no, perché non viene modificato per soddisfare il requisito? – preetam