Swift Academy · درس

مراجع weak وunowned

اختاروا بين weak الاختياري وunowned غير الاختياري لكسر الدورات.

الدرس 3 من 412 خطوة

مراجع weak وunowned درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا بكم

يتطلب كسر دورات الاحتفاظ استخدام مراجع لا تزيد عدّاد ARC. توفر Swift نوعين: `weak` (اختيارية، وتُصفَّر تلقائيًا) و`unowned` (غير اختيارية، وغير آمنة إذا أصبحت nil).

مراجع weak

```swift class Owner { var pet: Pet? } class Pet { weak var owner: Owner? } // does not retain var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p p?.owner = o o = nil // Owner deinit — p.owner becomes nil automatically ```

weak اختيارية دائمًا

```swift class View { weak var delegate: ViewDelegate? } ``` يجب أن تكون `weak` من النوع `var` واختيارية — إذ تُصفّرها Swift تلقائيًا عند إلغاء تخصيص الكائن المشار إليه.

مراجع unowned

```swift class Customer { var card: CreditCard? } class CreditCard { unowned let customer: Customer // card always has a customer init(customer: Customer) { self.customer = customer } } ``` لا تحتفظ `unowned` بالكائن المشار إليه، وهي غير اختيارية — وعليكم ضمان استمرار وجود الكائن المشار إليه بعد هذا الكائن.

اختيار weak أم unowned

| السيناريو | الاستخدام | |---|---| | قد يصبح الكائن المشار إليه nil | `weak` | | يستمر الكائن المشار إليه دائمًا بعد هذا الكائن | `unowned` | | غير متأكد | `weak` (أكثر أمانًا) |

الوصول إلى unowned بعد إلغاء التخصيص

```swift var customer: Customer? = Customer() var card = CreditCard(customer: customer!) customer = nil print(card.customer.name) // 💥 crash — unowned is dangling ``` لا تصلوا إلى `unowned` بعد إلغاء تخصيص الكائن المشار إليه.

[weak self] في الإغلاقات

```swift class VC { func load() { api.fetch { [weak self] data in guard let self else { return } self.render(data) } } } ``` تُعد `[weak self]` الطريقة الأكثر شيوعًا لإصلاح دورات الاحتفاظ في Swift.

[unowned self] في الإغلاقات

```swift class Session { var onComplete: (() -> Void)? init() { onComplete = { [unowned self] in // self always outlives closure self.finish() } } } ``` استخدموا `[unowned self]` فقط عندما تكونون متأكدين من أن `self` لن تكون nil عند تنفيذ الإغلاق.

ملاحظة التصفير التلقائي

```swift class Timer { weak var delegate: TimerDelegate? } var d: TimerDelegate? = ConcreteDelegate() let t = Timer() t.delegate = d d = nil print(t.delegate) // nil — automatically zeroed ```

أفضل ممارسة لنمط Delegate

أعلنوا دائمًا عن خصائص delegate باستخدام `weak`: ```swift protocol MyDelegate: AnyObject { func didUpdate() } class MyView { weak var delegate: MyDelegate? } ``` يُشترط القيد `AnyObject` لاستخدام `weak` مع البروتوكولات.

تحقق سريع

أي نوع من المراجع يُضبط تلقائيًا على `nil` عند إلغاء تخصيص الكائن المشار إليه؟

مراجعة

أهم النقاط: • `weak` — اختيارية، وتُصفَّر تلقائيًا، وآمنة • `unowned` — غير اختيارية، وتضمن استمرار وجود الكائن المشار إليه، لكنها تتسبب في تعطل البرنامج عند مخالفة ذلك • أنماط Delegate: استخدموا دائمًا `weak var delegate: Protocol?` مع قيد `AnyObject` • الإغلاقات: تُعد `[weak self]` النمط القياسي؛ استخدموا `guard let self` بداخلها • عند الشك، اختاروا `weak` بدلًا من `unowned` التالي: قوائم التقاط الإغلاقات.
البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

الأسئلة الشائعة

هل درس «مراجع weak وunowned» مجاني؟

نعم — نص درس «مراجع weak وunowned» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «مراجع weak وunowned»؟

اختاروا بين weak الاختياري وunowned غير الاختياري لكسر الدورات. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «مراجع weak وunowned»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كيف تحسب ARC المراجع
  2. دورات الاحتفاظ: الأسباب والكشف
  3. مراجع weak وunowned
  4. قوائم التقاط الإغلاقات و[weak self]
← العودة إلى Swift Academy