Почему мы должны копировать блоки, а не сохранять?
Недавно я столкнулся с проблемой использования блоков с переключением приложений Facebook. Мне нужно было позвонить в блок после входа в Facebook.
Сначала мой блок был уничтожен, когда приложение переключилось обратно (потому что оно было в стеке), поэтому я решил сохранить его. Но это не сработало, и я запутался в этой проблеме:/. Я нашел решение в этом блоге, а также здесь.
Мой вопрос прост: почему копирование работает, а сохранять - нет?
2 ответа
Потому что, когда вы создаете блок, нечего сохранять, так как он не существует в куче, пока вы не скопируете его туда с помощью Block_copy
, Это освещено в лекциях WWDC о блоках.
Дополнительная информация: http://www.friday.com/bbum/2009/08/29/blocks-tips-tricks/
Смотрите мой недавний ответ на другой похожий вопрос:
По умолчанию блоки создаются в стеке. Это означает, что они существуют только в том объеме, в котором они были созданы.
[...]
Прочитайте Mike Ash об объектах Stack и Heap в Objective-C, чтобы получить больше информации о стеке и куче.