2012-01-19 5 views
4

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

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

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

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

Спасибо.

ответ

6

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

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

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

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

+0

«Большинство методов, которые принимают обратные вызовы, скопируют блок для вас». Итак, если я метод, который принимает блок обратного вызова для некоторой операции async, мне нужно его скопировать? –

+0

@gyozokudor Да, это будет падать под футляром 2 – cobbal