أساسيات ARC: strong وweak وunowned
تعلّم عدّ المراجع في ARC ومتى تستخدم strong و weak و unowned لتجنّب تسرّبات الذاكرة.
أساسيات ARC: strong وweak وunowned درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
ARC في دقيقة واحدة
تستخدم Swift تقنية ARC (العدّ التلقائي للمراجع). يزيد كل مرجع strong عدد مراجع نسخة من فئة. وعندما ينخفض العدد إلى الصفر، تُنفَّذ deinit وتتحرر الذاكرة.
strong افتراضياً
يكون strong هو الخيار الافتراضي. وعند زوال آخر مرجع strong، يُستدعى deinit.
final class Person {
let name: String
init(_ name: String) { self.name = name; print("init:", name) }
deinit { print("deinit:", name) }
}
var p: Person? = Person("Ada")
p = nil // ARC count -> 0, triggers deinitمثال على دورة
تؤدي المراجع strong المتبادلة إلى إنشاء دورة احتفاظ. ولا تستطيع ARC تحريرها، مما يسبب تسرّباً للذاكرة.
final class A {
var b: B?
deinit { print("A deinit") }
}
final class B {
var a: A?
deinit { print("B deinit") }
}
var a: A? = A()
var b: B? = B()
a?.b = b // strong
b?.a = a // strong
a = nil // no deinit (cycle)
b = nil // still no deinit (leak)مرجع weak
اجعل أحد الطرفين weak لتجنب الدورة. تكون مراجع weak اختيارية، وتصبح nil تلقائياً عند إلغاء تخصيص الكائن.
final class A2 {
weak var b: B2? // weak breaks the strong cycle
deinit { print("A2 deinit") }
}
final class B2 {
var a: A2?
deinit { print("B2 deinit") }
}
var a2: A2? = A2()
var b2: B2? = B2()
a2?.b = b2 // weak
b2?.a = a2 // strong
a2 = nil // A2 deinit runs
b2 = nil // B2 deinit runsمرجع unowned
استخدم unowned عندما يكون الكائن المُشار إليه سيظل موجوداً بعد هذا المرجع. فهو غير اختياري ولا يُضبط على nil؛ وسيؤدي الوصول إليه بعد إلغاء تخصيصه إلى تعطل التطبيق، لذا يجب ضمان دورات الحياة.
final class Customer {
let name: String
var card: CreditCard?
init(_ name: String) { self.name = name }
deinit { print("Customer deinit") }
}
final class CreditCard {
unowned let owner: Customer // never optional; owner must outlive card
init(owner: Customer) { self.owner = owner }
deinit { print("CreditCard deinit") }
}
var cust: Customer? = Customer("Lars")
cust!.card = CreditCard(owner: cust!)
cust = nil // deallocates both (no cycle)نصائح وأنماط
نصائح:
- اجعل الخيار الافتراضي هو strong.
- اكسر الدورات باستخدام weak (تكون مراجع delegates عادةً من النوع weak).
- استخدم unowned فقط عند ضمان دورة الحياة (مثل: child → parent).
- الفئات أنواع مرجعية؛ ولا تحتاج البنى/التعدادات إلى قواعد ARC.
weak أم unowned؟
تحقق سريع: متى تختار weak بدلاً من unowned؟
مراجعة
مراجعة: تحرر ARC الكائنات عندما لا تبقى مراجع strong. امنع الدورات باستخدام weak (اختياري) أو unowned (عند ضمان دورة الحياة). اختر أقل مستوى ملكية آمن.
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «أساسيات ARC: strong وweak وunowned» مجاني؟
نعم — نص درس «أساسيات ARC: strong وweak وunowned» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «أساسيات ARC: strong وweak وunowned»؟
تعلّم عدّ المراجع في ARC ومتى تستخدم strong و weak و unowned لتجنّب تسرّبات الذاكرة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «أساسيات ARC: strong وweak وunowned»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات ARC: strong وweak وunowned
- دورات الاحتفاظ وكسرها باستخدام weak وunowned
- أنواع القيم لتقليل المشاركة