GCD(Grand central dispatch)

GCD(Grand central dispatch)

如果我们有一件工作,想要在某条指定的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];
});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值