Sobes.tech
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 хато меорад.