سؤال

هذا السؤال لديه بالفعل إجابة هنا:

ما هي المهام التي ستكون أكثر ملاءمة للاستخدام NSOperation على عكس الاستخدام GCD متى البرمجة لجهاز iPhone؟

بالنسبة لي يبدو أنهم يفعلون نفس الشيء. لا أستطيع أن أرى نقاط القوة والضعف لدى المرء على الآخر.

هل كانت مفيدة؟

المحلول

NSOperation تم تصميمه على قمة GCD ، وبالتالي فإن السؤال هو أكثر ما إذا كنت تستخدم NSOperation أو تمرير كتلة مباشرة إلى GCD.

و NSOperation ضخم ويحتاج إلى المزيد من رموز لوحة الغلاية لإعدادها ، ولكن لديها الكثير من الوظائف. يمكنك إنشاء نفس الشيء NSOperation الفئة الفرعية في أجزاء مختلفة من الكود الخاص بك ووضعها في قائمة الانتظار وقم بتشغيلها.

تمرير كتلة إلى GCD بواسطة EG dispatch_async سريع ويمكن التخلص منه. عادة لا تعيد استخدام كتلة في أي مكان آخر ؛ لقد قمت للتو بإعداد كتلة يتم تنفيذها فقط عند تلك النقطة من الكود ، وتنقلها إلى GCD أو واجهات برمجة التطبيقات الأخرى ، وتستمر بسرعة.

لذلك كل لديه مزاياه.

نصائح أخرى

على ما يبدو ، تم بناء nsoperationqueue على GCD اعتبارًا من iOS 4 ؛ لم يتم تحديث المستندات. تحقق من هذا النشر من قبل موظف Apple هنا: https://devforums.apple.com/message/352770 (قد تحتاج إلى إنشاء حساب) لذا ، يجب عليك اتباع نصيحة مايك عبد الله واستخدام أبسط واجهة برمجة التطبيقات للمهمة المطروحة. Dispatch_async هو المستوى الأدنى ، وعادة ما تكون الأشياء من النوع C (على سبيل المثال لا الحصر) ، وهي جيدة لصفقات نوع واحد ونوع متسلسل (النار هذه الكتلة في قائمة الانتظار هذه ، FTW). NSOPerationQueues هي مستوى أعلى ، والمواد الهدف ، وهي جيدة إذا كنت تضيف الكثير من العمليات في نقاط مختلفة في الكود الخاص بك ، و/أو تحتاج إلى إدارة التزامن وأولويات وتبعيات. على الأقل هذه هي الطريقة التي أستخدم بها.

كما هو الحال دائمًا مع مثل هذه الأسئلة ، استخدم أبسط واجهة برمجة التطبيقات المتاحة. قياس إذا كانت مشكلة في الأداء ثم إعادة تقييم إذا لزم الأمر.

شيء واحد لا أعتقد أنه تم ذكره هنا هو ذلك NSOperationيمكن إلغاء S أثناء التنفيذ ، في حين أن الكتلة مضمونة لإكمالها بمجرد بدء التنفيذ. بعد قولي هذا ، يمكن تعليق قائمة انتظار GCD (dispatch_suspend()) ، بحيث لن يتم تنفيذ أي كتل بعد الكتل المنفذة حاليًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top