2

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

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

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

4

1 回答 1

6

GCD 对象是实际的对象,编译器不会对它们进行特殊处理。您可以将它们添加到 Cocoa 集合中,在调试器中将它们放入等等...

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

于 2013-05-04T22:34:31.747 回答