Sobes.tech
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:

  1. 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.
  2. Bellek Talebi: Sistem, gereken boyutta belleği yığın (heap) üzerinde ayırmak için talepte bulunur.
  3. Bellek Ayırma: Yeterli boş alan varsa, yığın bir bellek bloğu ayırır ve ona işaretçi döner.
  4. İ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.
  5. Ö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")