postNotificationName 卡死
2017-06-15 本文已影响272人
952e2ff020e4
问题
在调用postNotificationName之后,卡死
原因
postNotificationName调用之后,会等待所有的观察者处理完之后,才会往下操作,也就是说postNotificationName是同步调用
解决
- 方法1:将postNotificationName的操作交于其他线程操作,使得此操作不会卡死主线程,demo如下:
NSLog(@"loginCb start");
[[NSNotificationCenter defaultCenter] postNotificationName:ECSDKLoginFeedback
object:@(YES)
userInfo:@{@"ERRRET":@(0),
@"SEQ":@(seq),
@"HANDLE":@(handle),
@"ERRORCODE":@(errorCode),
@"NOTIFICATIONTOKEN":@(notificationToken)
}];
});
- 方法2:可以通过NSNotificationQueue的enqueueNotification: postingStyle:和enqueueNotification: postingStyle: coalesceMask: forModes: 方法将通告放入队列,实现异步发送,在把通告放入队列之后,这些方法会立即将控制权返回给调用对象。 demo 如下:
NSNotification *notification = [NSNotification notificationWithName:kNotificationName
object:@"通知说话开始"];
[[NSNotificationQueue defaultQueue] enqueueNotification:notification
postingStyle:NSPostASAP];
遗留问题
- 使用方法1,post操作在某个线程进行操作等待,但是其他地方的观察者会不会正好在该线程,导致还是死锁?
尾注
1、文章可以随意转载;
2、有任何不对的地方欢迎在评论中指出;
3、遗留的问题大家帮忙解惑下;