NSNotificationQueue多线程

首先上代码:

– (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];[button setFrame:CGRectMake(0, 0, 400, 60)];[button addTarget:self action:@selector(buttonDown) forControlEvents:UIControlEventTouchUpInside];[button setTitle:@"Post Notification" forState:UIControlStateNormal];[self.view addSubview:button];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(actionNotification:)name:kNotificationName object:nil];});}- (void) actionNotification: (NSNotification*)notification{NSString* message = notification.object;NSLog(@"%@",message);sleep(5);NSLog(@"Action Notification Finish");}- (void)buttonDown{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSNotification *notification = [NSNotification notificationWithName:kNotificationNameobject:@"object"];[[NSNotificationQueue defaultQueue] enqueueNotification:notificationpostingStyle:NSPostASAP];});NSLog(@"buttonDown");}

打印信息如下:

2015-03-17 18:47:20.131 AppTest[19507:206469] buttonDown

也就是说,观察者们和poster有可能都在不同的子线程中,这样观察者们就收不到通知事件,

这里有个解决方法是把通知队列放主线程中去;

还有个解决方法就是把NSPostASAP改为NSPostNow。

,勇敢的冷静的理智的去接受失败,有时不但是必要的,而且是很有必要的。

NSNotificationQueue多线程

相关文章:

你感兴趣的文章:

标签云: