当用Objective-C编译器编译时,Grand Central Dispatch对象的行为与Objective-C对象相同。但这对我来说有点不清楚。实际上,Objective-C对象至少有一个字段:指向对象类结构的指针(isa
指针)。其他字段(如果有的话)对应于对象的ivars。作为Objective-C对象的GCD对象
那么,GCD对象可以被转换为其第一个字段是指向Objective-C类结构的指针的结构吗?由于调度对象参与ARC,因此编译器会做什么:它是否将retain
和release
消息发送给对象(例如,如objc_msgSend(obj, @selector(retain))
),还是生成dispatch_object_retain
和dispatch_object_release
调用?我的意思是,GCD对象是否以[obj mesg]
的方式响应ObjC消息?
但调度vtable必须等同于一个ObjC类。我的意思是,它必须有一个缓存,一个超类指针以及一个包含内部类和数据类的结构,用于内省和消息处理。这真的发生了吗? – LuisABOL 2013-05-05 00:24:25
如果它接收到一个调度对象,'object_getClassName()'返回什么?我可以自己测试它,但本月我没有使用我的Mac ... – LuisABOL 2013-05-05 00:42:35
它必须足够用于objc_msgSend才能工作,是的(因为在派遣类型中添加分支会太慢) – 2013-05-05 00:43:15