Objective c iOS调度\u异步,在iOS 4上崩溃
我正在向不同线程上的服务器发出服务器请求。加载完成后,我会收到一个委托回调,它会更新tableView。起初,我注意到一些奇怪的行为,并认为这可能是因为一些UI元素没有在主线程上执行 我添加了下面的代码,解决了这个问题,但是代码在iOS 4设备上崩溃了(原来调度队列优先级后台与iOS 4不兼容) 如果删除第一个Objective c iOS调度\u异步,在iOS 4上崩溃,objective-c,ios,Objective C,Ios,我正在向不同线程上的服务器发出服务器请求。加载完成后,我会收到一个委托回调,它会更新tableView。起初,我注意到一些奇怪的行为,并认为这可能是因为一些UI元素没有在主线程上执行 我添加了下面的代码,解决了这个问题,但是代码在iOS 4设备上崩溃了(原来调度队列优先级后台与iOS 4不兼容) 如果删除第一个dispatch\u async,并且只调用dispatch\u get\u main\u queue,代码运行正常: dispatch_async(dispatch_get_main_q
dispatch\u async
,并且只调用dispatch\u get\u main\u queue
,代码运行正常:
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Update view code etc...
});
在将我的更新发送到苹果之前,我想问一下这样做是否可以?该代码能否在iOS 4设备上正确运行
提前感谢。
调度队列\u优先级\u后台
仅在iOS 5及更高版本中可用
来自苹果文档
调度\队列\优先级\调度到队列运行的后台项目
背景优先;毕竟,队列被安排执行
已安排高优先级队列,并且系统在上运行项目
为后台状态设置优先级的线程。这样的线
具有最低优先级,并且任何磁盘I/O都会被限制以最小化
对系统的影响。在iOS 5.0及更高版本中提供
因此,如果你也在考虑为iOS 4发布应用程序,那么你就不能使用它
来源
但是,如果删除
DISPATCH\u QUEUE\u PRIORITY\u BACKGROUND
,您当前的代码将只在主ui线程中运行,这可能会导致您在执行远程请求时速度减慢您可以在低于iOS 5的设备上始终使用DISPATCH\u QUEUE\u PRIORITY\u LOW
。谢谢回复。您说过它只在主线程中运行,但只在括号内的部分代码中运行,对吗?我只是在所有后台工作完成后才将dispatch\u async放入回调中。明白了。非常感谢:)
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Update view code etc...
});