Middle
Sınıf başlatmanın bellek tahsisiyle nasıl bir ilişkisi var?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bir sınıf nesnesi başlatıldığında, onun depolanması için bellek ayrılır. Bu süreç aşağıdaki adımları içerir:
- Boyut Hesaplama: Sistem, sınıf örneğinin tüm özellikleri ve meta verileri (örneğin, sanal yöntemler tablosuna işaretçi) için gereken bellek miktarını belirler.
- Bellek Talebi: Sistem, gereken boyutta belleği yığın (heap) üzerinde ayırmak için talepte bulunur.
- Bellek Ayırma: Yeterli boş alan varsa, yığın bir bellek bloğu ayırır ve ona işaretçi döner.
- İnit (
init) çağrısı: Ayrılan belleğe işaretçi alındıktan sonra, sistem ilgili sınıfın (init) başlangıç durumunu ayarlamak için çağrılır. Başlatma sırasında ek kaynaklar tahsis edilebilir veya diğer nesneler oluşturulabilir. - Örnek döndürme: İnit işlemi tamamlanır ve sistem, oluşturulan ve başlatılan sınıf örneğine referans döner.
Ayrılan bellek, nesne serbest bırakılana kadar (Memory Management System tarafından) kullanılır durumda kalır (Automatic Reference Counting - ARC iOS'ta).
Örnek:
class MyClass {
var number: Int
var text: String
init(number: Int, text: String) {
// Bu noktada, örneğin bellek zaten ayrılmıştır.
self.number = number // Özelliğe atama
self.text = text // Özelliğe atama
// İnit tamamlandı, nesne kullanıma hazırdır.
}
}
// MyClass örneği oluşturuluyor.
// Bu, bellek ayırma ve init() çağrısını içerir.
let myObject = MyClass(number: 42, text: "Hello")