Я нашел некоторую информацию здесь:
Руководство по программированию сборки мусора
В стандартном приложении Какао автоматически намекает на подходящую точку в цикле событийэта коллекция может быть уместной.Сборщик затем инициирует сбор, если загрузка памяти превышает пороговое значение.Как правило, этого должно быть достаточно для обеспечения хорошей производительности.Однако иногда вы можете указать сборщику, что сбор может быть оправдан, например, после цикла, в котором вы создаете большое количество временных объектов.Вы можете сделать это, используя метод NSGarbageCollector collectIfNeeded.
Это, кажется, указывает на то, что сборщик мусора не будет магически запускаться в середине функций (или одновременно из другого потока!), Но только где-тов цикле событий.
Вы правы, однако, что в целом важно сохранять объекты в c ++, если вы не хотите, чтобы они были вымыты из-под вас, как указано в документе.:
Как правило, код C ++ должен оставаться неизменным: вы можете предполагать, что память выделяется из стандартной зоны malloc.Если вам нужно обеспечить долговечность объектов Objective-C, вы должны использовать CFRetain вместо retain.
EDIT
Упс, я обнаружил это подробнее освещающая часть эталона:
Коллектор управляется как запросом, так и запросом.Реализация Какао делает запросы в подходящее время.Вы также можете программно запросить рассмотрение цикла сборки мусора, и если порог памяти превышен, сбор запускается автоматически.
Сборщик работает в своем потоке в приложении.
Итак, как отмечает Джереми, сборщик мусора может работать в середине вашей функции, даже если ваша функция находится в главном потоке.