GCD对象作为Objective-C对象

Lui*_*BOL 2 objective-c objective-c-runtime grand-central-dispatch

当使用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消息?

Cat*_*Man 6

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

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