5

Swift, artık referans alınmayan ve dolayısıyla artık gerekmeyen nesneleri ayırmak için "Otomatik Referans Sayma" kullanır.Swift'de ARC taşması olasılığı?

Eğer bir sınıfın yeni bir örneğini oluşturmak her zaman, ARC o örneğe hakkındaki bilgileri saklamak için bellek yığını ayırır: Swift dil kılavuzu [1] Aşağıdaki belirtiyor. Bu bellek, bu örnekle ilişkili depolanmış özelliklerin [...] değerleri hakkında bilgi tutar.

Referans sayımın bir tam sayı olarak saklandığını varsayalım. Referans sayacı daha sonra taşma sorunu yaşayabilir mi? Eğer durum böyleyse, bu benim programımda ne gibi etkiler yaratacaktır ki, başkaları tarafından referans alınan nesneler sadece ayrılmakta mıdır?

Örnek olarak: Sayaç, işaretsiz bir 2 baytlık tamsayıysa, bu, 130 k civarında bir nesneye (doğru bir referans sayımına sahipken) üst referans sınırını koyar. Bu üst sınıra ulaşıldığında ve nesne bir kez daha referans alındığında, bu sayıcıyı bir kere artırarak tekrar 0 olarak ayarlar.

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

+3

4294967296 referanslar? Wowz. Bunu yapmak için yeterli belleğin var mı? – Zizouz212

+0

Sorunun oldukça varsayımsal bir sorun olduğunun farkındayım, bu durumda davranış beni yine de ilgilendirir;) – Benjamin

cevap

7

NSObject en retainCount 64 bit işletim sistemleri ile ilgili bir 64-bit işaretsiz bir tamsayıdır. Ve 32 bit işletim sistemlerinde 32 bit işaretsiz bir tamsayıdır. Bu aynı zamanda adres alanının boyutudur, bu yüzden tek bir nesneye çok sayıda referans oluşturmak ve sayımı taşmak imkansızdır.