the*_*ory 4 concurrency cocoa-touch uikit nsoperation ios
我的iPad应用程序与XML提要同步,在NSOperationQueue执行的NSOperation子类中运行同步.当它解析feed时,它会回调主线程performSelectorOnMainThread:withObject:waitUntilDone:
来更新UI的各个部分,安排下载等.其中一些非常昂贵; 随着同步的进行,UI有时会在一两秒内无响应.
为了使UI更具响应性,我删除了使用performSelectorOnMainThread:withObject:waitUntilDone:
支持直接调用来执行所有与同步相关的任务,包括更新UI.所以现在同步完全发生在NSOperationQueue创建的后台线程上.这似乎工作得很好,并且在同步期间UI更具响应性.
但是,我很抱歉以这种方式发布它.我在各个地方看到过一些人应该只更新主线程上的UI(例如参考AppKit).但我一直无法在文档中找到关于此主题的任何具体内容.
那么更新主线程上的UI有多重要?应用程序的哪些部分是线程安全的,哪些不是?是否有一个参考解释在NSOperation中执行什么是安全的,哪些应该只在iOS的主线程上执行?我真的在做一些不安全或容易崩溃的事情吗?
始终更新主线程上的UI非常重要.从后台线程触摸UI可能会导致各种问题,包括内部状态损坏,崩溃或只是简单的错误行为.任何不需要触摸UI的工作都应该在后台线程上进行,但是更新UI的代码位必须在主线程上进行.
归档时间: |
|
查看次数: |
2713 次 |
最近记录: |