0Pricing
Swift Academy · درس

أداتا Allocations وLeaks في Instruments

تتبّعوا تخصيصات الكومة، واعثروا على تسرّبات الذاكرة والكائنات الوهمية.

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

أداة Allocations

تتتبع أداة Allocations كل عملية حجز وتحرير للذاكرة في الكومة، وتعرض نمو الذاكرة بمرور الوقت.

// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objects

تحليل نمو الكومة

استخدم تطبيقك وراقب مخطط Live Bytes. يشير النمو المستمر من دون استقرار إلى وجود تسرّب في الذاكرة.

// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never released

تحليل الأجيال

حدّد لقطة للأجيال قبل تدفق استخدام معين وبعده لمعرفة الكائنات التي بقيت على نحو غير متوقع.

// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't released

أداة Leaks

تفحص أداة Leaks الكومة دوريًا، وتحدد الكائنات التي حُجزت في الذاكرة لكنها لم تعد قابلة للوصول (دورات الاحتفاظ).

// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graph

قراءة مخطط التسرّب

يوضح مخطط كائنات التسرّب الكائنات التي تحتفظ ببعضها بعضًا ضمن دورة، محددًا جذر دورة الاحتفاظ.

// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visually

اكتشاف دورات الاحتفاظ في عمليات الإغلاق

أكثر حالات التسرّب شيوعًا هي أن تلتقط عملية إغلاق self بقوة، بينما يحتفظ self بعملية الإغلاق.

class MyVC: UIViewController {
  var onComplete: (() -> Void)?
  override func viewDidLoad() {
    super.viewDidLoad()
    // LEAK: closure captures self; self holds onComplete
    onComplete = { self.dismiss(animated: true) }
    // FIX:
    onComplete = { [weak self] in self?.dismiss(animated: true) }
  }
}

أداة VM Tracker

تعرض أداة VM Tracker مناطق الذاكرة الافتراضية والصفحات المتسخة. ويؤدي ارتفاع الضغط الناتج عن الذاكرة المتسخة إلى إنهاء iOS لتطبيقك.

// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memory

الكائنات الزومبي

فعّل خيار Zombie Objects في Instruments لالتقاط الكائنات التي حُررت أكثر من اللازم؛ إذ تُحوَّل إلى "كائنات زومبي" تسجل رسالة عند الوصول إليها.

// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"

لقطات الكومة

قارن حالتين للكومة باستخدام "Heap Shot" للعثور على الكائنات التي تبقى بين اللقطتين، وهو أمر مفيد جدًا لاكتشاف تسرّبات viewcontroller.

// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or models

MetricKit لذاكرة الإنتاج

استخدم MXMetricPayload لجمع بيانات الذاكرة والأداء من المستخدمين الفعليين في بيئة الإنتاج.

import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
  func didReceive(_ payloads: [MXMetricPayload]) {
    payloads.forEach { print($0.memoryMetrics as Any) }
  }
}

تحقق سريع

إلى ماذا يشير النمو المستمر في مخطط "Live Bytes" ضمن أداة Allocations؟

مراجعة الدرس

استخدم Allocations لتتبع نمو الكومة ولقطات الأجيال. واستخدم Leaks لاكتشاف دورات الاحتفاظ وعرض مخطط الكائنات. واستخدم Zombie Objects لاكتشاف أخطاء التحرير الزائد. وأصلح عمليات الإغلاق باستخدام [weak self]. واستخدم MetricKit لتتبع ذاكرة المستخدمين الفعليين في بيئة الإنتاج.

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

هل درس «أداتا Allocations وLeaks في Instruments» مجاني؟

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

ماذا ستتعلم في «أداتا Allocations وLeaks في Instruments»؟

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

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

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

كم من الوقت يستغرق درس «أداتا Allocations وLeaks في Instruments»؟

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

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

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

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

  1. أساسيات Instruments: Time Profiler
  2. أداتا Allocations وLeaks في Instruments
  3. مدقّق الخيط الرئيسي والتعليق
  4. تحسين المسارات الساخنة: COW وInlining وSpecialisation
← العودة إلى Swift Academy