Avatar ·

هل من الضروري دائمًا استخدام [unowned self] في closures في Swift؟

مرحبًا بالجميع! أنا مطور iOS مبتدئ، ولا أستطيع فهم دورات المراجع القوية (retain cycles) في closures. إليك مثال بسيط: أقوم بطلب شبكة داخل controller. ```swift class ProfileViewController: UIViewController { var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() fetchUserProfile() } func fetchUserProfile() { APIClient.shared.getUserProfile { [weak self] profile in self?.nameLabel.text = profile.name } } } ``` أرى أن الكثيرين يستخدمون `[weak self]`، لكن البعض يكتبون `[unowned self]`. ما الفرق؟ متى يجب استخدام `unowned`؟ أم أنه من الأفضل دائمًا استخدام `weak`؟ سمعت أن `unowned` قد يسبب تعطلًا (crash) إذا كان الكائن قد تم تحريره بالفعل. ولكن لماذا هو موجود إذن؟ هل هناك حالات لا يكون فيها `weak` كافيًا أو مريحًا؟ من فضلك، اشرح بالأمثلة: في أي الحالات يكون `unowned` آمنًا، وفي أي الحالات لا يكون؟