2012-10-04 11 views
20

Seguendo un tutorial di iOS 5 sul corso di Paul Hegarty, vediamo questo codice in un'app che dimostra l'uso di GCD. Apparentemente GCD richiede il rilascio a causa di problemi relativi al multithreading che sono alquanto imprevedibili in quanto gli oggetti sono ancora necessari.È necessario rilasciare le code GCD sotto ARC in iOS 6.0?

dispatch_async(dowloadQueue, ^{ 
    .... 
    // do some stuff 
    .... 
    }); 
    dispatch_release(dowloadQueue); 

ho aggiornato a iOS 6 e XCode 4.5 e ottengo un "ARC vieta rilascio esplicito ..." messaggio

non ho provato questo codice sotto iOS5/XCode 4.2

È solo perché l'ARC è diventato più intelligente e non ho più bisogno di essere rilasciato in GCD? Oppure ho appena frainteso?

risposta

29

Quando si targetizza Mountain Lion e iOS 6.0, ARC gestisce ora le code di invio e altri tipi di GCD. Se scegli come target versioni precedenti di OS X o iOS, avrai comunque bisogno di mantenere e rilasciare in modo esplicito i tipi GCD (non solo per motivi di sicurezza dei thread, altrimenti perderai memoria), ma questo è gestito per te solo quando targetizzi il nuovo SO versioni.

Questo è il motivo per cui viene visualizzato un errore del compilatore sotto ARC durante il targeting di iOS 6.0.

+0

È necessario __bridge_transfer per Objective-C quando si crea la coda? – openfrog

+0

@openfrog - No, se è trattato come oggetto Objective-C è già gestito da ARC quindi non è necessario trasferirlo. –

+0

@BradLarson C'è un modo per disattivarlo? Oppure, come scrivo in modo che compili sia con iOS 5 sia con iOS 6? – fishinear

Problemi correlati