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操作。
相关文章推荐
- Silverlight中通过Javascript的XmlHttp调用服务器端内容的同步与异步问题
- DWR同步异步问题
- 同步与异步的问题
- ajax回调函数执行顺序带来的同步异步问题
- OF 同步异步问题的改进
- 软件架构设计中的同步与异步问题
- javascript Ajax 同步请求与异步请求的问题
- javascript异步调用的同步问题
- Ext treeLoader 同步、异步加载树 问题
- ajax框架dwr自定义同步异步--解决回调函数中处理无法得到预期结果问题
- 关于异步I/O请求被同步处理的问题。。
- AJAX 通用函数,轻松解决同步异步问题
- 委托 delegate ----同步、异步
- ajax的同步和异步问题
- 长连接及短连接以及同步异步的问题
- AJAX 同步调用与异步调用的问题
- I/O 同步,异步,阻塞,非阻塞问题
- ajax 同步异步模式问题
- 一个S2S通信中的同步、异步问题的解决
- ajax回调函数执行顺序带来的同步异步问题