您的位置:首页 > 其它

NSNotification、KVO、Delegate的同步和异步问题

2017-03-23 15:23 681 查看
近期探究了NSNotification、KVO、Delegate的同步和异步问题,发现之前项目中很多NSNotification的用法会导致性能的下降。
结论:NSNotification、KVO、Delegate在哪个线程中触发,就在哪个线程中响应,而且都是同步的,会阻塞当前线程,直到处理完成。


下面通过代码截图看下具体的情况:

首先在一个页面触发通知发送,如下:



在页面A和页面B同时监听这个通知消息,代码如下:





当两个页面都完成监听之后,触发消息发送,控制台的输出截图如下(删除了不相关的输出):

非主线程:



主线程阻塞:



通过输出的顺序发现,整个线程是被阻塞的,属于同步发送。

同理,也测试了KVO方式的监听,输出同样也是整个线程被阻塞,也属于同步的。

Delegate更不用说了,更是直接回调相应的函数,必须是同步的。

所以在开发中使用NSNotification、KVO、Delegate的时候,要注意避免阻塞主线程,如果方法中存在耗时操作,建议在方法中先异步的操作,最后如果要更新UI的话,再回到主线程做更新UI操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息