Grand Central Dispatch オブジェクトは、Objective-C コンパイラでコンパイルすると、Objective-C オブジェクトのように動作すると言われています。しかし、それは私には少しわかりません。
実際、Objective-C オブジェクトは、少なくとも 1 つのフィールド (isa
オブジェクトのクラス構造へのポインター (ポインター)) を持つ構造体です。他のフィールドがある場合は、オブジェクトの ivar に対応します。
では、GCD オブジェクトを、最初のフィールドが Objective-C クラス構造へのポインタである構造にキャストできますか? ディスパッチ オブジェクトは ARC に参加するため、コンパイラは何をしますか? オブジェクトretain
にrelease
メッセージを送信したり (objc_msgSend(obj, @selector(retain))
たとえば など)、生成dispatch_object_retain
してdispatch_object_release
呼び出したりしますか? つまり、GCD オブジェクトはこのように ObjC メッセージに応答します[obj mesg]
か?