0Pricing
Swift Academy · درس

المُنهِيات ودورة حياة الذاكرة

استخدموا deinit لتنظيف الموارد قبل تحرير الكائن من الذاكرة.

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

مرحبًا

يمكن لفئات Swift تعريف `deinit` يُنفَّذ قبل إلغاء تخصيص المثيل مباشرةً. ويُعد فهم دورة حياة الكائن كاملةً — init ← الاستخدام ← deinit — أساسيًا لإدارة الموارد.

ما هو deinit؟

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

قواعد صياغة deinit

• للفئات فقط؛ لا تملك البنى والتعدادات `deinit` • لا معاملات ولا قيمة إرجاع • لا تستخدم الأقواس: `deinit { }` وليس `deinit() { }` • يستدعيه ARC تلقائيًا؛ لا تستدعه بنفسك أبدًا • يُستدعى `deinit` الخاص بالفئة الأساسية تلقائيًا بعد `deinit` الخاص بالفئة الفرعية

حالات استخدام التنظيف

الاستخدامات الشائعة لـ `deinit`: • إغلاق اتصالات الشبكة • إزالة مراقبي الإشعارات: `NotificationCenter.default.removeObserver(self)` • إبطال المؤقتات • إغلاق مقابض الملفات أو اتصالات قواعد البيانات

عدد الاحتفاظ ودورة الحياة

يتتبع ARC عدد المراجع القوية التي تشير إلى كائن: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

سلسلة deinit للفئات الفرعية

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

يمنع weak الاحتفاظ

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` عند تعيين `owner` إلى nil، يمكن إلغاء تخصيص `Owner` حتى مع احتفاظ `Dog` بمرجع إليه.

تمنع دورات الاحتفاظ تنفيذ deinit

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

نمط إبطال المؤقت

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

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

إذا لم يُستدعَ `deinit` مطلقًا، فمن المحتمل أن تكون لديك دورة احتفاظ. استخدم قالب Leaks في Xcode Instruments → لاكتشاف الكائنات التي خُصصت ولم يُلغَ تخصيصها مطلقًا.

تحقق سريع

ما الأنواع التي يمكنها تعريف `deinit`؟

مراجعة

أهم النقاط: • ينظف `deinit { }` الموارد قبل إلغاء التخصيص • للفئات فقط؛ يُستدعى `deinit` للفئة الأساسية تلقائيًا بعد الفئة الفرعية • يحدد ARC وقت تنفيذ deinit، عندما ينخفض عدد الاحتفاظ إلى 0 • تمنع دورات الاحتفاظ تنفيذ deinit؛ اكسرها باستخدام `weak` أو `unowned` • استخدم Leaks في Instruments للعثور على الكائنات التي لا يُنفَّذ deinit لها مطلقًا اكتملت الدورة! التالي: أنماط التعداد وآلات الحالات.

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

هل درس «المُنهِيات ودورة حياة الذاكرة» مجاني؟

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

ماذا ستتعلم في «المُنهِيات ودورة حياة الذاكرة»؟

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

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

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

كم من الوقت يستغرق درس «المُنهِيات ودورة حياة الذاكرة»؟

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

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

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

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

  1. وراثة الأصناف والكلمة المفتاحية super
  2. ‏override وfinal ومنع إنشاء الأصناف الفرعية
  3. تحويل الأنواع: ‏is وas? وas! وas
  4. المُنهِيات ودورة حياة الذاكرة
← العودة إلى Swift Academy