2011-08-30 10 views
44

Se la lettura di "Zeroing Weak References" writeup di Mike Ash è corretta, i riferimenti deboli sono come riferimenti assign senza ARC. Tuttavia, se l'oggetto di riferimento viene deallocato, anziché ottenere un "puntatore pendente" (ovvero un puntatore che punta a un oggetto deallocato), il puntatore viene impostato su nil.Zeroing Weak References in ARC

Questo è giusto, e si verifica ciò con qualsiasi proprietà contrassegnata weak o assign (quando ARC è attivo)?

Se questo è corretto, questo eliminerebbe molti SIGABRT.

risposta

38

Per lo più è giusto, ma le proprietà assign sono ancora trattate come mai, solo weak si stanno azzerando. Un'altra avvertenza è che l'azzeramento dei riferimenti deboli è disponibile solo in Mac OS X ≥ 10.7 e iOS ≥ 5. Mentre il resto dell'ARC è stato eseguito il backport su 10.6 e iOS 4, i riferimenti deboli non possono essere utilizzati affatto su questi SO.

+6

Grazie per questo @cobbal. Almeno in XCode 4.2 beta, NON puoi usare 'weak' in una dichiarazione di proprietà se la tua destinazione di implementazione è

+1

Grazie a @Yar, stavo ricevendo quell'errore e non sapevo da dove venisse! – Pascal

+1

Eccellente punto sulla retro compatibilità. – jlehr