قوائم المهام لـ Swift: دليل شامل لـ GCD و Operation Queues

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة
```html

ما هي قوائم المهام في Swift؟

قوائم المهام (Task Queues) هي آلية قوية لتعدد الخيوط في Swift، تتيح إدارة فعالة للتنفيذ المتوازي للكود على iOS و macOS. بدلاً من إنشاء الخيوط يدويًا، تستخدم تجريدات جاهزة: Grand Central Dispatch (GCD) و Operation Queues. وهي توزع المهام تلقائيًا على نوى المعالج المتاحة، وتحسن الأداء، وتُبسّط مزامنة البيانات.

لماذا نحتاج إلى قوائم المهام؟

  • التنفيذ غير المتزامن — تجنب حظر الخيط الرئيسي عند العمل مع الشبكة أو الملفات أو قواعد البيانات.
  • قابلية التوسع — يتكيف الكود تلقائيًا مع عدد نوى الجهاز.
  • إدارة الأولويات — يتم تنفيذ المهام العاجلة قبل مهام الخلفية.
  • تجنب حالات السباق (race conditions) — آليات مزامنة مدمجة (الحواجز، الإشارات).

كيفية التثبيت وبدء الاستخدام

قوائم المهام هي جزء من المكتبة القياسية Foundation و Dispatch. لا يتطلب استخدامها تثبيت حزم إضافية. فقط قم باستيراد الوحدات:

import Foundationimport Dispatch

الوظائف الأساسية

1. Grand Central Dispatch (GCD)

توفر GCD قوائم انتظار عامة بأولويات مختلفة (QoS):

  • .userInteractive — لتحديثات واجهة المستخدم والرسوم المتحركة.
  • .userInitiated — للمهام التي بدأها المستخدم (الضغط على زر).
  • .utility — للعمليات الطويلة (تحميل الملفات).
  • .background — للمهام غير المرتبطة بواجهة المستخدم (المزامنة).

2. Operation Queues

Operation Queues هي تجريد أعلى مستوى من GCD. تدعم:

  • التبعيات بين العمليات.
  • إلغاء المهام.
  • الحد الأقصى لعدد العمليات المتوازية.

مثال كود بلغة Swift (iOS/macOS)

مثال 1: GCD — تحميل بيانات غير متزامن

DispatchQueue.global(qos: .userInitiated).async {    // عمل شاق في الخلفية    let data = try? Data(contentsOf: url)        DispatchQueue.main.async {        // تحديث واجهة المستخدم على الخيط الرئيسي        self.imageView.image = UIImage(data: data)    }}

مثال 2: Operation Queue مع تبعية

let queue = OperationQueue()queue.maxConcurrentOperationCount = 2

let downloadOp = BlockOperation { // تحميل الصورة}let filterOp = BlockOperation { // تطبيق فلتر على الصورة}filterOp.addDependency(downloadOp)

queue.addOperations([downloadOp, filterOp], waitUntilFinished: false)

متى تستخدم قوائم المهام؟

  • عند العمل مع URLSession، URLSessionDataTask — استخدم دائمًا قوائم الخلفية.
  • لمعالجة مصفوفات كبيرة من البيانات (CoreData، JSON).
  • عند تنفيذ تجمع خيوط لطلبات الشبكة.
  • في الألعاب والتطبيقات ذات الرسومات المكثفة (Metal، SpriteKit).

الخلاصة

قوائم المهام في Swift هي أداة لا غنى عنها لإنشاء تطبيقات سريعة الاستجابة وعالية الأداء. يناسب GCD الاستدعاءات غير المتزامنة السريعة، بينما تناسب Operation Queues السيناريوهات المعقدة ذات التبعيات. استخدمها لتجنب تجميد الواجهة واستخدام موارد الجهاز بكفاءة.

```

توصيات