Middle
Чӣ гуна оғозёбии синфҳо бо тақсимоти хотира алоқаманд аст?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми эҷоди намунаи синфи (объект) система блоки хотирасозиро барои нигоҳдории хусусиятҳо ва метаданакҳо ҷудо мекунад. Инициализатор (init) як усули махсус аст, ки барои танзим кардани ин блоки хотира пас аз ҷудо ва пеш аз баргардонидани объекти пурра инициализатсияшуда фаро хонда мешавад.
Процес дар бар мегирад:
- Ҷудо кардани хотира: Системаи амалӣ (аз тариқи муҳити иҷрои Swift/Objective-C) ҳаҷми заруриро дар хати хотира (heap) захира мекунад. Андоза вобаста ба навъи синф, шумора ва навъҳои хусусиятҳои он аст.
- Инициализатсияи хусусиятҳо: Инициализатор кафолат медиҳад, ки ҳамаи хусусиятҳои нигоҳдоштаи намуна арзишҳои ибтидоӣ гиранд. Ин хеле муҳим аст, зеро хусусиятҳои ноиҷодшуда метавонанд ба ҳолати номуайян ва хатоҳо дар вақти иҷро оварда расонанд.
- Даъвати
init: Иҷрои инициализатори мувофиқ барои синф, ки логикаи заруриро барои танзими ҳолати объект иҷро мекунад. Ин метавонад дохил кардани арзишҳо ба хусусиятҳо, даъвати дигар методҳо ё иҷрои ҳар гуна кори инициализатсионӣ. - Баргардонидани объект: Пас аз иҷрои муваффақонаи инициализатор, муҳити иҷроиш ишорагардонро ба объекти навсозишударо ва инициализатсияшударо бармегардонад.
Дар Swift қоидаҳои инициализатсия мавҷуданд, ки бехатариро таъмин мекунанд:
- Ҳамаи хусусиятҳои нигоҳдоштаи намуна бояд то анҷоми кори инициализатори синф арзишҳои ибтидоӣ дошта бошанд.
- Пеш аз он ки ба хусусият арзиш таъин карда шавад, хотираш бояд ҷудо карда шавад.
- Инициализатори синфи фарзанда бояд хусусиятҳои худро пеш аз даъвати инициализатори синфи падар инициализатсия кунад (инициализатсияи дуқадамӣ).
Масалан, робитаи байни инициализатсия ва хотира:
class MyClass {
let myProperty: Int // Хусусияти нигоҳдошташуда, ки инициализатсия талаб мекунад
init(value: Int) {
self.myProperty = value // Инициализатсия кардани хусусият, хотира барои он ҳоло муқаррар шудааст
// Ҳамчун ки инъикоси 'myProperty' дар вақти эҷоди инстанс ҷудо шудааст,
// арзиши он дар ин ҷо дар инициализатор муқаррар мешавад.
}
// Агар инициализатори ошкор пешниҳод нашуда бошад, Swift метавонад як инициализатор стандартӣ пешниҳод кунад
// агар ҳамаи хусусиятҳо арзишҳои пешфарз дошта бошанд ё опсионалӣ бошанд.
// Дар ин ҳолат, 'myProperty' арзиши пешфарз надорад,
// бинобар ин, инициализатор барои таъин кардани он зарур аст.
}
// Эҷоди намуна:
let instance = MyClass(value: 10) // Ин даъват ҷудо кардани хотира ва сипас методи init-ро фаъол мекунад
Пас, инициализатсия мустақиман бо ҷудо кардан ва танзими хотираи ҷудошуда барои намунаи махсуси синф алоқаманд аст.