GCD(Grand central dispatch)
如果我们已经在后头了,想要在main thread执行工作,那么就把 dispatch_get_global_queue 换成 dispatch_get_main_queue
我们经常会让某个工作在后头执行,执行完毕之后,在继续在 main thread 更新UI,让用户知道这件工作已经执行完毕,我们便可以组合前面2个呼叫:
2.dispatch_after
可以延后执行某个block在某个指定的dispatch queue上执行,我们可以用这个function代替timer。
如果我们有一件工作,想要在某条指定的thread上执行,现在最简单的方式大概就是呼叫GCD。GCD其实包含相当多的API,是一群C function的组合,其中我们最常用的是 dispatch_async。
dispatch_async 这个function,可以让我们选择要在哪个指定的thread上,用非同步的方式执行一个block。
dispathc_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIOPITY_DEFAULT,0),^{
[someObject doSomething];
});
dispatch_get_global_queue 这个function会让系统根据目前的状况,在适当的实际建立一条thread,第一个参数是这条thread执行工作的优先程度,优先程度会从2到-2安排,2为最重要,-2为最不重要;至于第二个参数则是保留参数,目前都没有作用,直接填0即可。
如果我们已经在后头了,想要在main thread执行工作,那么就把 dispatch_get_global_queue 换成 dispatch_get_main_queue
dispathc_async(dispatch_get_main_queue(),^{
[someObject doSomething];
});
我们经常会让某个工作在后头执行,执行完毕之后,在继续在 main thread 更新UI,让用户知道这件工作已经执行完毕,我们便可以组合前面2个呼叫:
dispathc_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIOPITY_DEFAULT,0),^{
[someObject doSomethingInBackgroud];
//更新UI
dispathc_async(dispatch_get_main_queue(),^{
[someObject doSomethingOnMainThread];
});
});
2.dispatch_after
可以延后执行某个block在某个指定的dispatch queue上执行,我们可以用这个function代替timer。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2 * NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[someObject doSomething];
});