Junior — Middle
Тафовут байни ишораҳои Weak ва Unowned дар идоракунии хотира чист?
sobes.tech AI
Ҷавоб аз AI
Дар Swift, ишораҳои навъи weak ва unowned барои пешгирӣ аз гирдоби ишораҳои қавӣ (retain cycles) дар идоракунии хотира истифода мешаванд, аммо дар рафтор ва истифода фарқ мекунанд.
-
Weak (ишораи заиф):
- Мумкин аст, ки
nilбошад. - Ба сифати навъи интихобшаванда (опционалӣ) эълон мешавад (
var delegate: SomeDelegate? weak). - Вақте ки ишора метавонад дар тӯли ҳаёти объект
nilшавад, масалан, дар делегатҳо, истифода мешавад. - Система автоматӣ ишораи
weak-ро баnilмегузорад, вақте ки объекте, ки ба он ишора мекунад, озод мешавад.
- Мумкин аст, ки
-
Unowned (бе соҳиб):
- Наметавонад
nilбошад (навоҳиди наопционалӣ). - Вақте истифода мешавад, ки ишора дар тӯли ҳаёти объект кафолат дода шудааст, масалан, байни падар ва кӯдак.
- Агар объекте, ки ба он ишора мекунад, аллакай озод шуда бошад, кӯшиши дастрасӣ ба он хатогӣ дар вақти иҷро (crash) ба вуҷуд меорад.
- Наметавонад
Масал:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
// Ин ҷо, tenant unowned аст, зеро хона наметавонад бе иҷорагир вуҷуд дошта бошад.
class DelegateHolder {
weak var delegate: SomeDelegate?
}
// Дилегат weak аст, зеро мумкин аст, ки пеш аз вақт озод шавад.
Аз ин рӯ, weak барои ишораҳое мувофиқ аст, ки метавонанд nil гарданд, ва unowned барои ишораҳое, ки бояд ҳамеша дар тӯли ҳаёти объект дуруст бошанд.