GCD对象作为Objective-C对象

时间:2013-05-04 22:30:54

标签: objective-c grand-central-dispatch objective-c-runtime

当使用Objective-C编译器编译时,Grand Central Dispatch对象的行为类似于Objective-C对象。但这对我来说有点不清楚。

Objective-C对象实际上是至少有一个字段的结构:指向对象类结构的指针(isa指针)。其他字段(如果有)对应于对象的ivars。

那么,可以将GCD对象转换为第一个字段是指向Objective-C类结构的指针的结构吗?由于调度对象参与ARC,编译器会做什么:它是向对象发送retainrelease消息(例如objc_msgSend(obj, @selector(retain)))还是生成dispatch_object_retaindispatch_object_release来电?我的意思是,GCD对象是否以[obj mesg]方式响应ObjC消息?

1 个答案:

答案 0 :(得分:6)

GCD对象是实际对象,编译器不会特别对待它们。您可以将它们添加到Cocoa集合中,在调试器中添加它们等等......

但是,运行时确实对它们进行了一些特殊处理。他们的isa指针指向调度vtable而不是常规的ObjC类。