Sto studiando ARC. E ora sull'azzeramento dell'indicatore debole. OK Ho capito tutte le funzionalità. La semantica di di riferimento debole è esattamente la stessa cosa con riferimento debole del sistema GC, ma sai, Objective-C non usa GC (eccetto casi speciali) quindi non riesco a capire come funziona.Come viene implementato il comportamento del puntatore debole di azzeramento dell'ARC?
Sono un ragazzo un po 'complicato, quindi ho bisogno di conoscere il principio di implementazione sottostante per accettare la funzione da utilizzare. Ma il problema è che è molto difficile trovare il documento che descrive il principio di azzeramento-debole puntatore :(
IMO, l'unico modo per fare questo lavoro sta rintracciando e mantenendo tutti i puntatori stesso fanno riferimento in fase di esecuzione, e l'impostazione tutti nil
quando il suo conteggio riferimento diventa 0
. Ma questo sembra troppo pesante e stupido. credo molto meglio soluzione utilizzata in concreta attuazione ARC.
mi potete aiutare a trovare la documentazione, o descrizione diretta sarebbe più grande!
Infatti, sotto ARC, il compilatore emette il codice per chiamare funzioni come 'objc_storeWeak' e' objc_loadWeakRetain'. Queste funzioni sono un'API documentata: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime –
Sì, e queste funzioni sono il modo in cui aggiunge e rimuove i puntatori deboli dal set archiviato nell'oggetto, come ho affermato quando ho detto "ARC aggiunge solo il codice per aggiungere un puntatore a quel set ogni volta che l'oggetto viene assegnato a un nuovo riferimento debole" –
Sai se il puntatore debole è azzerato nel momento in cui il conteggio dei riferimenti dell'oggetto scende a 0, o quando è de-allocato? Mi sono imbattuto in un problema ora con un puntatore "Assegna" in cui l'oggetto di riferimento è riutilizzato, ma viene ancora chiamato il suo dealloc, perché il suo conteggio di riferimento è sceso a 0 in mezzo. Mi stavo chiedendo se un puntatore debole azzerato lo risolvesse. – fishinear