Sobes.tech
Middle

Kuidas on klasside initsialiseerimine seotud mälu eraldamisega?

sobes.tech AI

Vastus AI-lt

Objekta klases inicializācijas laikā tiek piešķirta atmiņa tā glabāšanai. Šis process ietver šādas darbības:

  1. Izmēra aprēķināšana: Sistēma nosaka nepieciešamo atmiņas apjomu, lai glabātu visas klases piemēra īpašības un metadatus (piemēram, virtuālo metožu tabulas norādītāju).
  2. Atmiņas pieprasījums: Sistēma nosūta pieprasījumu atmiņas piešķiršanai nepieciešamajā izmērā uz atmiņas krātuvi (heap).
  3. Atmiņas piešķiršana: Ja ir pietiekami brīvas vietas, heap piešķir atmiņas bloku un atgriež norādi uz to.
  4. Inicializatora (init) izsaukšana: Saņemot norādi uz piešķirto atmiņu, sistēma izsauc atbilstošo klases inicializatoru (init) sākotnējā stāvokļa iestatīšanai. Inicializācijas laikā var tikt piešķirti papildu resursi vai izveidoti citi objekti.
  5. Piemēra atgriešana: Inicializators pabeidz darbu, un sistēma atgriež saiti uz izveidoto un inicializēto klases piemēru.

Piešķirtā atmiņa paliek aizņemta līdz brīdim, kad objekts tiek atbrīvots atmiņas pārvaldības sistēmas (Automatic Reference Counting - ARC iOS) dēļ.

Piemērs:

class MyClass {  
    var number: Int  
    var text: String  

    init(number: Int, text: String) {  
        // Šajā posmā atmiņa piemēram jau ir piešķirta.  
        self.number = number // Piešķir vērtību īpašībai  
        self.text = text     // Piešķir vērtību īpašībai  
        // Inicializators pabeidz darbu, objekts ir gatavs lietošanai.  
    }  
}  

// Izveido MyClass piemēru.  
// Tajā pašā laikā notiek atmiņas piešķiršana un izsaukums init().  
let myObject = MyClass(number: 42, text: "Hello")