iOS多线程——初步使用GCD中的Context

本文探讨了在iOS开发中,如何理解和使用GCD(Grand Central Dispatch)中的Context参数。通过官方文档和实践,了解到Context是用于传递应用程序定义的上下文信息到工作函数。由于Context需要C语言的指针,而Objective-C对象使用ARC管理内存,因此需要通过特定的转换(如__bridge, __bridge_retained, __bridge_transfer)来在ARC和非ARC环境中传递对象。文中给出了错误示例和正确做法,帮助开发者掌握在多线程场景下,如何安全地利用Context传递OC对象。" 111968124,10293531,浏览器崩溃:活性化HTML与内存泄漏,"['内存管理', 'JavaScript', '浏览器兼容性', 'Web性能', 'Ajax开发']
摘要由CSDN通过智能技术生成

本着好好学习,天天向上的原则,在上次看完GCD后,在码代码的过程中,经常会在dispatch后自动跳出函数列中看到带有context,但是在平常的自学过程中,都没有见到过带有context的参数。那他到底指的是啥?

带着这个好奇心,我努力的爬遍了网上我能找到的相关文档。然而相关的资料很少,最后没办法只能去苹果的官方文档上找,最终大概的了解了这个context的作用。(果然,最原始的才是最有效的。)

在官方文档中有这么一个方法void dispatch_async_f( dispatch_queue_t queue, void *context, dispatch_function_t work),这个方法和我们日常搜用的dispatch_async类似,唯一的区别的就是中间增加了context这个参数。

画外音:不是dispatch_async中用的是blockdispatch_async_f中用的是work么?

答:这两个反正都是为了引用一个代码块,实际上的作用基本上都差不多的啦

而苹果对于这个context的解释是这样的:

The application-defined context parameter to pass to the function.

将程序中定义的上下文传递给参数。

那么新的问题又来了,既然他是将上下文传递给参数,我们在OC编码的过程中,主要还是基于Foundation框架,也就是所有对象继承与NSObject对象,但是他是一个OC对象,而这个context所需要的内容是一个基于C语言的指针。那么如果将OC对象转化成C呢?

画外音:我就是不用OC,我用C的malloc也是可以的啊

你出去!

正如我们所知道的,OC是C的拓展,让C拥有了面向对象的作用,从而大大提高的程序员开发的效率。同时苹果为了更方便的让开发者使用OC这门语言,他们在iOS 5以后加入到LLVM 3.0编译器的。同时使用ARC能够解决开发者心烦的手动管理内存问题,这极大的方便了程序猿们。

而C因为没有ARC机制,所以解决前面这个问题的方法就是ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值