Объекты GCD как объекты Objective-C
Говорят, что объекты Grand Central Dispatch ведут себя как объекты Objective-C при компиляции с помощью компилятора Objective-C. Но это немного неясно для меня.
Объекты Objective C на самом деле являются структурами, которые имеют, по крайней мере, одно поле: указатель (isa
указатель) на структуру класса объекта. Другие поля, если таковые имеются, соответствуют ивару объекта.
Итак, можно ли привести объекты GCD к структурам, первое поле которых является указателем на структуру класса Objective-C? Поскольку диспетчерские объекты участвуют в ARC, что делает компилятор: отправляет ли он retain
а также release
сообщения объектам (например, objc_msgSend(obj, @selector(retain))
, например) или генерирует dispatch_object_retain
а также dispatch_object_release
звонки? Я имею в виду, отвечают ли объекты GCD на сообщения ObjC в [obj mesg]
мода?
1 ответ
Объекты GCD являются реальными объектами, и компилятор не обрабатывает их специально. Вы можете добавить их в коллекции Cocoa, добавить их в отладчик и т. Д.
Тем не менее, среда выполнения делает специальную обработку для них. Их указатель isa указывает на vtable диспетчеризации, а не на обычный класс ObjC.