Sobes.tech
Junior — Middle

Мо метавонед шарҳи кунед, ки дар контексти идораи хотира чӣ маъно дорад термин 'Unowned'?

sobes.tech AI

Ҷавоб аз AI

في سياق إدارة الذاكرة في iOS (و Swift)، مصطلح "Unowned" يعني مرجع ضعيف إلى كائن، لا يزيد من عداد المراجع (retain count)، ولكنه يفترض أن الكائن موجود أثناء استخدام هذا المرجع.

الاختلافات عن weak:

  • المرجع weak يمكن أن يصبح nil إذا تم حذف الكائن، ولهذا يُعلن عنه كاختياري.
  • المرجع unowned غير اختياري ولا يتم تعيينه تلقائيًا إلى nil. إذا تم حذف الكائن الذي يشير إليه unowned، فإن محاولة الوصول إليه ستؤدي إلى خطأ في وقت التشغيل (crash).

يُستخدم عندما يتم ضمان أن عمر الكائن المشار إليه أطول أو يساوي عمر المرجع.

مثال:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

هنا، يحتفظ Pet بمرجع unowned إلى Owner، مع افتراض أن Owner يعيش أطول من Pet.