محدد الأداء:مع الكائن:بعد التأخير:هل يمكنني أن أطلب أولوية منخفضة؟

StackOverflow https://stackoverflow.com/questions/871340

  •  22-08-2019
  •  | 
  •  

سؤال

هل هناك طريقة ما عند إرسال هذه الرسالة لتحديد أنني أفضل تنفيذ أداة التحديد الخاصة بي بعد جميع أحداث واجهة المستخدم المعلقة، إن وجدت؟أي.إعطاء مؤقت aterDelay الخاص بي أولوية أقل في قائمة انتظار الأحداث.

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

المحلول

لا مباشرة.إذا كنت تستخدم performSelector:withObject:afterDelay: يتم تنفيذ المحدد على موضوع الرئيسي, ، لذا بحكم التعريف، سيحدث ذلك بعد تنفيذ جميع أحداث واجهة المستخدم "المعلقة" الحالية - ولكن قد يكون هذا في منتصف التمرير أو الرسوم المتحركة، والذي ربما تعتبره حدثًا واحدًا مستمرًا ولكنه في الواقع مئات الأحداث المنفصلة.

ومع ذلك، يمكنك تحقيق شيء مماثل باستخدام performSelectorInBackground:withObject:, ، ومن ثم الاتصال [NSThread setThreadPriority:0.01] في الطريقة التي يتم استدعاؤها.كن حذرًا، فأنت تفتح سلسلة محادثات في الخلفية، لذا لا يمكنك إجراء أي استدعاءات لواجهة المستخدم.ومع ذلك، سيسمح لك هذا بالقيام بالعمل على سلسلة رسائل في الخلفية ذات أولوية أقل من سلسلة رسائل واجهة المستخدم الرئيسية.(تذكر أن تقوم بإعداد تجمع التحرير التلقائي لأنه موجود في سلسلة رسائل خاصة به!)

نصائح أخرى

في الحقيقة، performSelector:withObject:afterDelay: ليس من الضروري أن يحدث ذلك في الموضوع الرئيسي؛ولهذا السبب هناك طريقة منفصلة performSelectorOnMainThread:withObject:waitUntilDone:.الوثائق ل performSelector:withObject:afterDelay: يقول

يستدعي طريقة جهاز الاستقبال على حاضِر الموضوع باستخدام الوضع الافتراضي بعد تأخير.

إذا كنت ترغب في تنفيذ مهمة في الخلفية، فقد تنظر فيها +[NSThread detachNewThreadSelector:toTarget:withObject:], ، والذي سيطلق سلسلة رسائل جديدة لأداء مهمتك، ويترك واجهة المستخدم مستجيبة.يعد استخدام مؤشر ترابط منفصل لتنفيذ مهمة طويلة الأمد والتي قد تؤدي إلى قفل واجهة المستخدم الخاصة بك فكرة جيدة بشكل عام، ولكنه يضيف تعقيدًا.إذا لم تكن على دراية بالخيوط، فقد ينتهي بك الأمر إلى حدوث أخطاء ليس لها أي معنى.

في تعليق أعلاه، ذكرت أنك تعتقد أن الرسوم المتحركة قد تكون مسؤولة عن جعل واجهة المستخدم الخاصة بك غير مستجيبة.إذا كنت تستخدم الدعم المدمج للرسوم المتحركة (Core Animation أو أحد أغلفة Cocoa)، فيجب ألا تجعل الرسوم المتحركة واجهة المستخدم الخاصة بك غير مستجيبة.تعني واجهة المستخدم غير المستجيبة عمومًا أن برنامجك يقوم بالكثير من العمل على سلسلة المحادثات الرئيسية قبل السماح لحلقة التشغيل بالعودة إلى أحداث واجهة مستخدم الخدمة.

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