Junior
Модификатори ёддоштии weak дар Swift чӣ аст?
sobes.tech AI
Ҷавоб аз AI
Модификатори weak истифода мешавад барои шикастани циклҳои истинодҳои қавӣ байни объектҳо, вақте ки як объект дорои истиноди қавӣ ба дигар аст ва он дар навбати худ истиноди қавӣ ба объекти аввал дорад.
Хусусиятҳои асосии weak:
- Меъёри ҳисобкунии истинодҳоро намеафзояд: Истифодаи
weakшумораи истинодҳои қавиро ба объект зиёд намекунад. - Мумкин аст
nilбошад: Истиноди заиф (Optional) аст ва автоматӣnilмешавад, вақте ки объекте, ки ба он ишора мекунад, деинициализатсия мешавад. - Барои муносибатҳои падар/чаҳор истифода мешавад: Аксар вақт истифода мешавад, вақте ки объектчаи кӯдак истинод ба падараш дорад, то аз циклҳои истинодҳои қавӣ пешгирӣ кунад.
- Муҳим аст, ки ҳамчун
varэълон шавад: Зеро истиноди заиф метавонадnilшавад, бояд ҳамчун тағирёбанда (var) эълон карда шавад, на ҳамчун константа (let).
Маслиҳат барои истифода:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) оғоз мешавад")
}
deinit {
print("\(name) ба охир мерасад")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Истиноди заиф
init(unit: String) {
self.unit = unit
print("Ҳуҷра \(unit) оғоз мешавад")
}
deinit {
print("Ҳуҷра \(unit) ба охир мерасад")
}
}
Бе weak var tenant: Person? дар синфи Apartment, цикли истинодҳои қавӣ ба вуҷуд меояд, ва намунаҳои Person ва Apartment вақте ки дигар истинодҳои қавӣ ба онҳо вуҷуд надошта бошад, деинициализатсия намеёбанд. Бо кӯмак аз weak, вақте ки намунаи Person деинициализатсия мешавад, истиноди tenant дар намунаи Apartment автоматӣ nil мешавад.