Sobes.tech
Middle

Siniflərin ilkinləşdirilməsi yaddaş ayırması ilə necə əlaqəlidir?

sobes.tech Süni İntellekt

AI-dan cavab

Sınıfın (obyektin) nümunəsini yaratdıqda, sistem onun xüsusiyyətləri və metadatalarını saxlamaq üçün yaddaş blokunu ayırır. (init) - bu xüsusi metod, yaddaş blokunu ayırdıqdan sonra və tam olaraq başlanğıc vəziyyətinə gətirilmiş obyekt geri qaytarılmadan əvvəl konfiqurasiya etmək üçün çağırılır.

Proses aşağıdakıları əhatə edir:

  1. Yaddaş ayırma: Əməliyyat sistemi (Swift/Objective-C icra mühiti vasitəsilə) lazım olan yaddaş miqdarını yığma (heap) yaddaşında rezerv edir. Ölçü, sinifin növü, onun xüsusiyyətlərinin sayı və növlərinə bağlıdır.
  2. Xüsusiyyətlərin başlanması: Başlanğıcçı, nümunənin bütün saxlanılan xüsusiyyətlərinin başlanğıc dəyərlər almasını təmin edir. Bu çox vacibdir, çünki başlanmamış xüsusiyyətlər qeyri-müəyyən vəziyyətə və işləmə zamanı səhvlərə səbəb ola bilər.
  3. init çağırışı: Müvafiq sinif başlanğıcçısı çağırılır, obyektin vəziyyətini tənzimləmək üçün lazım olan məntiqi icra edir. Bu, xüsusiyyətlərə dəyərlər təyin etmək, digər metodları çağırmaq və ya digər başlanğıc işlərini həyata keçirmək ola bilər.
  4. Obyektin geri qaytarılması: Uğurlu init icrasından sonra, icra mühiti yeni yaradılmış və başlanmış obyektə göstərici qaytarır.

Swift-də təhlükəsizliyi təmin edən başlanğıc qaydaları mövcuddur:

  • Bütün nümunənin saxlanılan xüsusiyyətləri sinifin init-inin sonunda başlanğıc dəyərinə malik olmalıdır.
  • Bir xüsusiyyətə dəyər təyin etmədən əvvəl, onun yaddaşı ayırılmalıdır.
  • Törəmə sinifin init-i, valideyn sinifin init-ini çağırmadan əvvəl öz xüsusiyyətlərini başlatmalıdır (iki mərhələli başlanğıc).

Başlanğıc və yaddaş arasındakı əlaqənin nümunəsi:

class MyClass {
    let myProperty: Int // Başlanğıc tələb edən saxlanılan xüsusiyyət

    init(value: Int) {
        self.myProperty = value // Xüsusiyyəti başlatır, onun üçün yaddaş artıq təyin olunub
        // 'myProperty' üçün yaddaş, MyClass nümunəsi yaradıldıqda ayırılıb,
        // amma onun dəyəri burada `init`-də təyin edilir.
    }

    // Əgər açıq `init` təmin edilməzsə, Swift standart `init`-i təmin edə bilər
    // əgər bütün xüsusiyyətlər standart dəyərlərə və ya opsionaldırsa.
    // Bu halda, 'myProperty' standart dəyərə malik deyil,
    // ona görə də onu təyin etmək üçün `init` tələb olunur.
}

// Nümunə yaratmaq:
let instance = MyClass(value: 10) // Bu çağırış yaddaş ayırmağı və sonra `init` metodunu işə salır

Beləliklə, başlanğıc birbaşa olaraq ayırma və ayırılmış yaddaşın konfiqurasiyası ilə əlaqəlidir.