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:
- 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).
- 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).
- Atmiņas piešķiršana: Ja ir pietiekami brīvas vietas, heap piešķir atmiņas bloku un atgriež norādi uz to.
- 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. - 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")