本着好好学习,天天向上的原则,在上次看完GCD后,在码代码的过程中,经常会在dispatch后自动跳出函数列中看到带有context,但是在平常的自学过程中,都没有见到过带有context的参数。那他到底指的是啥?
带着这个好奇心,我努力的爬遍了网上我能找到的相关文档。然而相关的资料很少,最后没办法只能去苹果的官方文档上找,最终大概的了解了这个context的作用。(果然,最原始的才是最有效的。)
在官方文档中有这么一个方法void dispatch_async_f( dispatch_queue_t queue, void *context, dispatch_function_t work)
,这个方法和我们日常搜用的dispatch_async
类似,唯一的区别的就是中间增加了context这个参数。
画外音:不是
dispatch_async
中用的是block
,dispatch_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机制,所以解决前面这个问题的方法就是ÿ