ios - الاحتفاظ بالدورة في مندوب سويفت



swift delegates (1)

weak المراجع weak لا تنطبق إلا على الطبقات، وليس الهياكل أو المحافل، وهي أنواع القيمة. ولكن البروتوكولات بشكل افتراضي يمكن أن تنطبق على أي من تلك الأنواع.

تحديد MainToolBarDelegate فئة فقط:

protocol MainToolBarDelegate: class {

}

ثم عليك أن تكون قادرا على أن تعلن مندوبك weak .

لدي UIToolbar في UIToolbar . تحصل على مثيل من لوحة مصورة.

أنا جعلت فئة مخصصة لبلدي UIToolbar . استنادا إلى بعض المنطق أفعل أو لا تظهر أزرار على ذلك.

و UIViewController يحتاج إلى اتخاذ إجراءات عندما يتم استغلالها بعض الأزرار. لهذا قمت بإنشاء بروتوكول مندوب في UIToolbar .

حاليا، عندما أرفض الرأي، يتم الاحتفاظ بها في الذاكرة. وكشفت تحقيقات أخرى أن المندوب أنشأ دورة استبقاء.

وفي الهدف "جيم"، سنحدد ببساطة أن المندوبين weak . ومع ذلك، أنا باستخدام سويفت، وأنها لا تسمح لي أن تعريف متغير delegate weak :

weak var navigationDelegate: MainToolBarDelegate?
// 'weak' cannot be applied to non-class type 'MainToolBarDelegate'

عندما أقوم برفض وحدة تحكم العرض، تعيين self.toolBar.navigationDelegate = nil ويتم مسح الذاكرة. لكنه يشعر بالخطأ!

لماذا أحصل على دورة الاحتفاظ ولماذا لا يمكنني ببساطة تعريف المندوب بأنه weak ؟





retain-cycle