Я предварю этот вопрос, заявив, что то, что я собираюсь задать, предназначено только для образовательных и, возможно, отладочных целей.
Как блочные объекты создаются внутри среды выполнения Objective C?
Я вижу иерархию классов, представляющих различные типы блоков, и самый высокий суперкласс в иерархии, ниже NSObject
, это NSBlock
. Дамп данных класса показывает, что он реализует методы + alloc
, + allocWithZone:
, + copy
и + copyWithZone:
. Ни один из других подклассов блоков не реализует эти методы класса, что наводит меня на мысль, возможно ошибочную, что NSBlock
отвечает за обработку блоков.
Но эти методы, похоже, не вызываются ни в какой момент времени жизни блока. Я обменялся реализациями со своими и поставил в каждую точку останова, но они так и не вызываются. Выполнение аналогичного упражнения с реализациями NSObject
дает мне именно то, что я хочу.
Итак, я предполагаю, что блоки реализованы по-другому? Кто-нибудь может пролить свет на то, как работает эта реализация? Даже если я не могу зацепиться за выделение и копирование блоков, хотелось бы понять внутреннюю реализацию.
[NSBlock alloc]
для создания блока, поэтому они не вызываются. - person Bryan Chen   schedule 22.11.2013