同步处理来自推送通知操作的操作
Handle actions from Push notification actions synchronously
我想使用 FIFO
同步处理 push notification
操作。里面:
(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler
我有很多块,我希望当我收到一个动作时,我将它(连同它的块)添加到 FIFO
。
NSOperationQueue* queue = [[ NSOperationQueue alloc ] init];
queue.maxConcurrentOperationCount = 1;
NSOperation* someOperation = [NSBlockOperation blockOperationWithBlock:^(void) { NSLog(@"Done.");}];
if (queue.operations.count != 0)
[someOperation addDependency: queue.operations.lastObject];
您也可以简单地向 NSOperationQueue 添加一个类别:
@interface NSOperationQueue (FIFOQueue)
- (void)addOperationAfterLast:(NSOperation *)op;
@end
@implementation NSOperationQueue (FIFOQueue)
- (void)addOperationAfterLast:(NSOperation *)op
{
if (self.maxConcurrentOperationCount != 1)
self.maxConcurrentOperationCount = 1;
NSOperation* lastOp = self.operations.lastObject;
if (lastOp != nil)
[op addDependency: lastOp];
[self addOperation:op];
}
@end
并使用[队列addOperationAfterLast:myOperation]。
尝试使用这种方法
dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0);
dispatch_async(myQueue, ^{
printf("1");
});
dispatch_async(myQueue, ^{
printf("2");
});
dispatch_async(myQueue, ^{
printf("3");
});
dispatch_async(myQueue, ^{
printf("4");
});
dispatch_async(myQueue, ^{
printf("5");
});
// wait for queue to empty
dispatch_sync(myQueue, ^{
printf("done");
});
我想使用 FIFO
同步处理 push notification
操作。里面:
(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler
我有很多块,我希望当我收到一个动作时,我将它(连同它的块)添加到 FIFO
。
NSOperationQueue* queue = [[ NSOperationQueue alloc ] init];
queue.maxConcurrentOperationCount = 1;
NSOperation* someOperation = [NSBlockOperation blockOperationWithBlock:^(void) { NSLog(@"Done.");}];
if (queue.operations.count != 0)
[someOperation addDependency: queue.operations.lastObject];
您也可以简单地向 NSOperationQueue 添加一个类别:
@interface NSOperationQueue (FIFOQueue)
- (void)addOperationAfterLast:(NSOperation *)op;
@end
@implementation NSOperationQueue (FIFOQueue)
- (void)addOperationAfterLast:(NSOperation *)op
{
if (self.maxConcurrentOperationCount != 1)
self.maxConcurrentOperationCount = 1;
NSOperation* lastOp = self.operations.lastObject;
if (lastOp != nil)
[op addDependency: lastOp];
[self addOperation:op];
}
@end
并使用[队列addOperationAfterLast:myOperation]。
尝试使用这种方法
dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0);
dispatch_async(myQueue, ^{
printf("1");
});
dispatch_async(myQueue, ^{
printf("2");
});
dispatch_async(myQueue, ^{
printf("3");
});
dispatch_async(myQueue, ^{
printf("4");
});
dispatch_async(myQueue, ^{
printf("5");
});
// wait for queue to empty
dispatch_sync(myQueue, ^{
printf("done");
});