0Pricing
Swift Academy · درس

دورات الاحتفاظ: الأسباب والكشف

حدّدوا دورات الاحتفاظ بين الكائنات والإغلاقات باستخدام Instruments.

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

مرحبًا

تحدث دورة احتفاظ عندما يحتفظ كائنان أو أكثر بمراجع قوية لبعضهما، مما يمنع ARC من الوصول إلى عدد يساوي صفرًا — ويسبب تسربًا للذاكرة.

دورة بسيطة بين كائنين

```swift class Owner { var pet: Pet? } class Pet { var owner: Owner? } var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p // Owner → Pet (strong) p?.owner = o // Pet → Owner (strong) o = nil; p = nil // Neither deinit called — cycle! ```

دورة الأصل والابن

```swift class Node { var children: [Node] = [] var parent: Node? // strong → cycle with parent } let root = Node() let child = Node() root.children.append(child) child.parent = root // cycle ```

دورة التقاط Closure

```swift class ViewController { var onComplete: (() -> Void)? func setup() { onComplete = { // closure strongly captures self self.doWork() // ← cycle! } } } ```

دورة نمط Delegate

```swift protocol TaskDelegate: AnyObject { func didFinish() } class Task { var delegate: TaskDelegate? // if strong → potential cycle } class Manager: TaskDelegate { var task = Task() init() { task.delegate = self } // Manager → Task → Manager } ```

الاكتشاف باستخدام Instruments

استخدموا Xcode Instruments → Leaks: 1. شغّلوا التطبيق في Instruments 2. انقروا على أداة Leaks 3. تشير العلامات الحمراء إلى الكائنات المتسربة 4. تعمقوا لرؤية الرسم البياني للمراجع بديلًا عن ذلك: عيّنوا `deinit { print(...) }` وتحققوا من تنفيذه.

الاكتشاف باستخدام Xcode Memory Graph

في مصحح أخطاء Xcode: Debug > Memory Graph Debugger. انقروا على كائن متسرب لرؤية سلسلة مراجعه — وستظهر الدورة كحلقة مغلقة في الرسم البياني.

أنماط الدورات الشائعة

• تخزين Delegate لـ delegate بمرجع قوي • التقاط Closure لـ `self` بمرجع قوي • مراجع قوية ثنائية الاتجاه بين الأصل والابن • احتفاظ مراقب NotificationCenter بـ closure تلتقط self • كون هدف Timer هو `self` (بمرجع قوي)

دورة احتفاظ Timer

```swift class Poller { var timer: Timer? func start() { timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in self?.poll() // weak self breaks cycle } } deinit { timer?.invalidate() } } ```

دورة NotificationCenter

```swift class Listener { var token: NSObjectProtocol? init() { token = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) { [weak self] _ in self?.refresh() } } deinit { NotificationCenter.default.removeObserver(token!) } } ```

تحقق سريع

ما دورة الاحتفاظ في ARC؟

مراجعة

أهم النقاط: • دورات الاحتفاظ: مراجع قوية متبادلة → لا يُلغى تخصيص أيٍّ منهما • شائعة في: المفوضين، والإغلاقات، والروابط ثنائية الاتجاه بين الأصل والابن • اكتشفها باستخدام Instruments Leaks أو Xcode Memory Graph Debugger • أصلحها باستخدام مراجع `weak` أو `unowned` • يمكن أن تتسبب المؤقتات وNotificationCenter أيضًا في دورات — اكسرها باستخدام `[weak self]` التالي: مراجع weak وunowned.

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

هل درس «دورات الاحتفاظ: الأسباب والكشف» مجاني؟

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

ماذا ستتعلم في «دورات الاحتفاظ: الأسباب والكشف»؟

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

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

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

كم من الوقت يستغرق درس «دورات الاحتفاظ: الأسباب والكشف»؟

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

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

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

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

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