2

Grand Central Dispatch オブジェクトは、Objective-C コンパイラでコンパイルすると、Objective-C オブジェクトのように動作すると言われています。しかし、それは私には少しわかりません。

実際、Objective-C オブジェクトは、少なくとも 1 つのフィールド (isaオブジェクトのクラス構造へのポインター (ポインター)) を持つ構造体です。他のフィールドがある場合は、オブジェクトの ivar に対応します。

では、GCD オブジェクトを、最初のフィールドが Objective-C クラス構造へのポインタである構造にキャストできますか? ディスパッチ オブジェクトは ARC に参加するため、コンパイラは何をしますか? オブジェクトretainreleaseメッセージを送信したり (objc_msgSend(obj, @selector(retain))たとえば など)、生成dispatch_object_retainしてdispatch_object_release呼び出したりしますか? つまり、GCD オブジェクトはこのように ObjC メッセージに応答します[obj mesg]か?

4

1 に答える 1