Junior — Middle
Кадом сабабҳо истифодаи Unowned-ро дар баъзе ҳолатҳо камтар афзалтар мекунад?
sobes.tech AI
Ҷавоб аз AI
Истифодаи unowned дар iOS (Swift) камтар тавсия дода мешавад дар ҳолатҳое, ки хавфи он вуҷуд дорад, ки объекте, ки ба он бо unowned ишора шудааст, пеш аз истифодаи ишора озод карда шавад (deallocated). Баръакси weak, unowned интихобнопазир аст ва ҳангоми озод кардани объект nil намешавад, бинобар ин, дастрасӣ ба чунин ишора пас аз озод кардан ба хати барномасозӣ (runtime error) оварда мерасонад.
Далелҳо барои парҳез аз unowned:
- Агар давраи ҳаёти объект кафолат надиҳад, ки ишора ҳамеша дуруст хоҳад буд.
- Дар ишораҳои мураккаб, ки тартиби озодкунии объектҳо маълум нест.
Дар чунин ҳолатҳо, беҳтар аст, ки weak истифода шавад, ки худ ба худ nil мешавад, ва аз ин рӯ, аз баромадҳои ногаҳонӣ пешгирӣ мекунад.
Масалан:
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Агар объект B пеш аз A озод карда шавад, дастрасӣ ба b дар A хато меорад.