Я написал следующий код для объединения, используя NSNotificationQueue. Я хочу опубликовать только одно уведомление, даже если событие происходит несколько раз.
- (void) test000AsyncTesting
{
[NSRunLoop currentRunLoop];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(async000:) name:@"async000" object:self];
[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:@"async000" object:self]
postingStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName forModes:nil];
while (i<2)
{
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
NSLog(@"Polling...");
i++;
}
}
- (void) async000:(NSNotification*)notification;
{
NSLog(@"NSNotificationQueue");
}
Каждый раз при вызове метода test000AsyncTesting в очередь добавляются уведомления с одинаковым именем.
Согласно концепции объединения, если в очереди есть любое количество уведомлений, но с тем же именем, то она будет опубликована только один раз.
Но когда я запускаю свой код, «async000:» вызывается несколько раз, что в точности равно числу уведомлений, добавленных в NSNotificationQueue. Я думаю, что объединение не работает.
Для меня выполнение кода остается одинаковым в обоих случаях:
Случай 1:
[[NSNotificationQueue defaultQueue] enqueueNotification: [NSNotificationtificationWithName: @ "async000" объект: self]
postingStyle: NSPostWhenIdle coalesceMask: NSNotificationCoalescingOnName forModes: nil];
Случай 2:
[[NSNotificationQueue defaultQueue] enqueueNotification:
[NSNotificationtificationWithName: @ "async000" объект: self]
postingStyle: NSPostWhenIdle];
Пожалуйста, сообщите об ошибке в моем коде.