Edit: La mia risposta precedente era probabilmente sbagliato.
Alcuni estratti selezionati dal ARC docs dicono:
3. puntatori all'oggetto retainable
Un puntatore oggetto a conservazione (o puntatore a conservazione) è un valore di tipo puntatore oggetto a conservazione (tipo a conservazione). Ci sono tre tipi di tipi di puntatore dell'oggetto retainable:
- puntatori a blocchi (formato applicando il cursore (^) dichiaratore sigillo per un tipo di funzione)
4,2. Semantica
L'assegnazione avviene quando si valuta un operatore di assegnazione. La semantica varia in base alla qualifica:
- Per gli oggetti forti, il nuovo pointee viene prima trattenuto; in secondo luogo, il lvalue è caricato con semantica primitiva; in terzo luogo, il nuovo pointee è immagazzinato nel lvalue con semantica primitiva; e infine, il vecchio pointee viene rilasciato. Questo non viene eseguito atomicamente; la sincronizzazione esterna deve essere utilizzata per rendere questo sicuro di fronte a carichi e negozi concorrenti.
4.4.1.Oggetti
Se un oggetto viene dichiarato con il tipo di proprietario dell'oggetto conservabile, ma senza un qualificatore di proprietà esplicito, il suo tipo viene adattato implicitamente per avere una qualifica __strong.
7.5. Blocchi
Ad eccezione dei ritardi eseguiti come parte dell'inizializzazione di una variabile di parametro __strong o della lettura di una variabile __weak, ogni volta che questa semantica richiede di mantenere un valore di tipo puntatore a blocchi, ha l'effetto di un Block_copy. L'ottimizzatore può rimuovere tali copie quando vede che il risultato è utilizzato solo come argomento per una chiamata.
Quindi penso che la risposta sia forse, a seconda dell'ottimizzatore.
Sono d'accordo non è chiaro cosa "questa semantica" si riferisca a – sbooth
+1, il testo della sezione è incredibilmente confuso. – orip
Ho parlato con l'ingegnere Apple che ha scritto questa sezione. Ha detto che "questa semantica" si riferisce all'intero documento. Quindi un 'Block_copy' dovrebbe essere inserito automaticamente. Sembra che forse questo era un bug all'inizio con blocchi che sono stati successivamente risolti. – bearMountain