Jeśli mam kilka zajęć obserwujących konkretną NSNotification, w jakiej kolejności obserwatorzy są powiadamiani o wysłaniu powiadomienia?Kolejność notowań NSNotification of observer
Odpowiedz
Nie ma gwarancji co do tego, jakie powiadomienia o zamówieniach są wysyłane. Jeśli potrzebujesz zamówienia, możesz utworzyć klasę, która nasłuchuje na jedno powiadomienie i wysyłać wiele zamówionych powiadomień, których zamiast tego mogą wysłuchać inne klasy.
Kolejność jest niezdefiniowana. Apple zarządza listą obserwatorów i za każdym razem, gdy powiadomienie jest wysyłane, dokonuje iteracji na liście i powiadamia każdego zarejestrowanego obserwatora. Lista może być tablicą lub słownikiem lub czymś zupełnie innym (np. Powiązana lista struktur), a ponieważ obserwatorzy mogą być dodawani i usuwani w czasie wykonywania, lista może się również zmieniać w dowolnym momencie, a więc nawet jeśli wiesz, jak lista jest obecnie zaimplementowana, nigdy nie można polegać na żadnym konkretnym zamówieniu. Dalsza aktualizacja systemu OS X może spowodować zmianę wewnętrznych elementów listy i to, co jest prawdziwe w wersji 10.7, może nie być prawdziwe w przypadku wersji 10,8 lub 10.6.
Ja testowałem go i wygląda na to, że obiekty są sortowane według addObserver metoda
wyjście Consol dla tego testu jest:
2016-04-04 22:04:02.627 notificationsTest[1910:763733] controller 8
2016-04-04 22:04:02.629 notificationsTest[1910:763733] controller 1
2016-04-04 22:04:02.629 notificationsTest[1910:763733] controller 2
AppDelegate.m
#import "AppDelegate.h"
#import "ViewController.h"
#include <stdlib.h>
@interface AppDelegate()
@property (strong, readwrite, nonatomic) NSTimer *timer;
@property (strong, readwrite, nonatomic) NSMutableArray *array;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.array = [NSMutableArray array];
ViewController *vc3 = [ViewController new]; vc3.index = 8;
ViewController *vc1 = [ViewController new]; vc1.index = 1;
ViewController *vc2 = [ViewController new]; vc2.index = 2;
[self.array addObject:vc1];
[self.array addObject:vc3];
[self.array addObject:vc2];
self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(sendNotification:) userInfo:nil repeats:YES];
return YES;
}
- (void)sendNotification:(NSNotification *)notification {
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTitle1 object:nil];
}
@end
ViewController.m
#import "ViewController.h"
#import "AppDelegate.h"
@interface ViewController()
@property (assign, readwrite, nonatomic) NSInteger index;
@end
@implementation ViewController
- (instancetype)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(respondToNotification:) name:kNotificationTitle1 object:nil];
}
return self;
}
- (void)respondToNotification:(NSNotification *)notification {
NSLog(@"controller %ld", self.index);
}
@end
- 1. częściowe zastosowanie F # Notowań
- 2. NSNotification EXC_BAD_ACCESS
- 3. NSNotification vs. Delegate Protocols?
- 4. Przykład NSNotification userinfo?
- 5. szyny ActiveRecord :: Observer w wtyczce
- 6. Observer Pattern abstract vs interface
- 7. NSNotification jest wywoływany wiele razy
- 8. NSNotification prowadzi do błędu segmentacji
- 9. Obserwator w NSNotification (itemDidFinishPlaying) RANDOMLY do dwukrotnego wywołania
- 10. Event/Observer Driven Ruby on Rails
- 11. Callback/Command vs. EventListener/Observer Pattern
- 12. the Benifits of awakeFromNib?
- 13. KVO vs NSNotification kontra protokół/delegaci?
- 14. Dlaczego obserwator w NSNotification zadzwonił dwa razy ...?
- 15. Usuwanie komórek z UICollectionView poprzez NSNotification
- 16. Czy mogę obejrzeć NSNotification z innej klasy?
- 17. ObservableCollection (Of T) vs BindingList (Of T)?
- 18. Kolejność i kolejność parametrów OleDbCommand
- 19. Jak wykonywać różne operacje w ramach aktualizacji Observer() w Javie?
- 20. Odwróć kolejność legend
- 21. Kolejność zakładki EditText
- 22. Powiadomienia UITextField i klawiatury - dziwna kolejność
- 23. ArrayList versus array of objects versus Collection of T
- 24. najszybsze Struct-of-tablic do Array-of-kodowanym Conversion
- 25. NSDateComponents of NSDate
- 26. Shadow inside of div
- 27. Swift Deinitialization of Globals
- 28. Java ArrayList of Doubles
- 29. Factorization of large numbers
- 30. forward declaration of namespace
Sądzę, że zostały zgłoszone w tej samej kolejności, co do dodania obserwatora. W każdym razie nie będę polegał na tym fakcie, ponieważ dotyczy to wewnętrznych elementów 'NSNotificationCenter' i może się zmienić w przyszłości. – atxe