Когда мне нужно скопировать блок? - PullRequest
4 голосов
/ 19 января 2012

Я не знаю, когда мне нужно скопировать блок.
В документации написано when you expect the block to be used after destruction of the scope within which it was declared.

Нужно ли мне копировать его, когда я использую их, например, в качестве методов обратного вызова? Под копией я подразумеваю создание свойства копии для моего блока и сохранение его там или каким-либо образом отправка сообщения копирования. Область видимости может быть уничтожена после завершения загрузки или чего-то подобного. Так что мне нужно скопировать блок в этом случае? Могу ли я создать круговые ссылки таким образом?

Прямо сейчас у меня есть класс загрузчика (только для тестирования блоков, для меня это слишком опасно), который использует блок завершения, и когда я копирую блок, контроллер представления, который создал блок, и класс загрузчика не вышел.

Можете ли вы привести несколько хороших примеров, особенно их использование для завершения асинхронных операций, таких как загрузка файлов?

Спасибо.

1 Ответ

6 голосов
/ 19 января 2012

В большинстве случаев методы, которые принимают обратные вызовы, будут копировать блок для вас

Я могу вспомнить два случая, когда вам нужно скопировать блок самостоятельно в Objective-C

  • когда вы возвращаете блок из функции
  • когда вы сохраняете блок в переменную класса (это тот случай, когда вы реализуете метод, который принимает обратный вызов на более позднем этапе).

Поскольку именно в этот раз блок выпадает из области видимости, прежде чем он будет использован или обработан.

...