iOS子线程更新UI的两种方法

方法1:performSelectorOnMainThread

[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:NO];



方法2:dispatch_async(dispatch_get_main_queue(), ^{ ... })

dispatch_async(dispatch_get_global_queue(0, 0), ^{  

   // 处理耗时操作的代码块...  

     

   //通知主线程刷新  

   dispatch_async(dispatch_get_main_queue(), ^{  

       //回调或者说是通知主线程刷新,  

   });  

     

});  

dispatch_async开启一个异步操作,第一个参数是指定一个gcd队列,第二个参数是分配一个处理事物的程序块到该队列。

dispatch_get_global_queue(0, 0),指用了全局队列。


一般来说系统本身会有3个队列。global_queue,current_queue,以及main_queue.


获取一个全局队列是接受两个参数,第一个是我分配的事物处理程序块队列优先级。分高低和默认,0为默认2为高,-2为低


[cpp]  view plain copy

#define DISPATCH_QUEUE_PRIORITY_HIGH     2  

#define DISPATCH_QUEUE_PRIORITY_DEFAULT  0  

#define DISPATCH_QUEUE_PRIORITY_LOW     (-2)  

处理完事物后,需要将结果返回给或者是刷新UI主线程,同样,和上面一样,抓取主线程,程序块操作。



上一篇:【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2014年版)


下一篇:iOS开发多线程篇—自定义NSOperation