سؤال

هل هناك أي مشاكل في حالة السباق عند استخدام NSNotifications داخل موضوع واحد؟ هذه طريقة عينة:

- (void) playerToggled: (NSNotification *) notification {
if (timerPane.playing && ! timerPane.paused) {
    [playerPane toggleCurrentPlayer];
    [timerPane toggleTimer];
    [mainPane playerToggled];
}

}

ستؤدي المكالمتان الأوليان بعد الشرط إلى قيام NSNotifications التي سيتم استلامها بواسطة MainPane. هل MainPane مضمون لتلقي رسالة playertoggled بعد هذه الإخطارات؟ أود أن أقول إن هذا الرمز يبدو أنه مطلوب (يتم تنفيذ playertoggled دائمًا). لكنني لست متأكدًا من مشكلات التوقيت الموجودة حول الإشعارات ولا يمكنني العثور على إجابة محددة.

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

المحلول

لست متأكدًا تمامًا مما تقصده ، لكنني أعتقد أن هذا سيكون مفيدًا لك:

http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/notifications/articles/notificiue.html#//apple_ref/doc/uid/20000217

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

نصائح أخرى

لا توجد شروط سباق متوقعة. بالإضافة إلى إجابة دان دونالدسون ، إليك اقتباس آخر من مستندات NSNotificationCenter:

يقدم مركز الإخطار إخطارات للمراقبين بشكل متزامن. وبعبارة أخرى ، فإن الأساليب: لا تعود الأساليب حتى يتلقى جميع المراقبين ومعالجة الإشعار. لإرسال الإخطارات بشكل غير متزامن استخدام nsnotificationqueue.

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