5

Swift utilizza "Conteggio di riferimento automatico" per deallocare oggetti che non sono più referenziati e quindi non più necessari. La guida lingua Swift [1] afferma quanto segue:Possibilità di overflow ARC in Swift?

Ogni volta che si crea una nuova istanza di una classe, ARC assegna un pezzo di memoria per memorizzare le informazioni su tale istanza. Questa memoria contiene informazioni sui valori di [...] proprietà memorizzate associate a tale istanza.

Suppongo che il conteggio dei riferimenti venga memorizzato come numero intero. Il contatore di riferimento potrebbe quindi subire un overflow? Se questo è il caso, quali implicazioni avrebbe questo sul mio programma, gli oggetti che vengono ancora referenziati da altri vengono semplicemente deallocati?

Ad esempio: se il contatore fosse, ad esempio, un intero a 2 byte senza segno, questo imposterà il limite superiore di riferimenti a un oggetto (pur avendo un conteggio di riferimento corretto) attorno a 130k. Raggiunto quel limite superiore e l'oggetto viene nuovamente referenziato, questo incrementerebbe il contatore di uno, impostandolo nuovamente su 0.

[1] https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

+3

4294967296 riferimenti? Wowz. Hai ... abbastanza memoria per farlo? – Zizouz212

+0

Sono consapevole che la domanda è piuttosto ipotetica, il comportamento in quel caso mi interesserebbe comunque;) – Benjamin

risposta

7

di NSObject retainCount è un numero intero senza segno a 64 bit a 64 bit OS. Ed è un intero senza segno a 32 bit su sistemi operativi a 32 bit. Questa è anche la dimensione dello spazio degli indirizzi, quindi è impossibile creare tanti riferimenti a un singolo oggetto e sovraccaricare il conteggio.