NSNotificationQueueを使用してコアレーションを実行する次のコードを書きました。イベントが複数回発生した場合でも1つの通知のみを送信します。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:[NSNotification notificationWithName:@ "async000" 対象:自己] postingStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName forModes:nil];
ケース2: [NSNotificationQueue defaultQueue] enqueueNotification: [NSNotification notificationWithName:@ "async000" オブジェクト:自己] postingStyle:NSPostWhenIdle]。
私のコードでエラーを教えてください。
ここで、 ' - (void)dealloc;'の中で 'super'に' dealloc'を呼び出さなければなりません。 – Daniel