Объекты 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.

Другие вопросы по тегам