Нужно ли сохранять блоки в Objective-C для iOS?

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

Должен ли я сохранить блок? Управляется ли память блоков так же, как и любой другой объект? Могу ли я синтезировать свойство, чтобы держать блок?

2 ответа

Решение

Блоки похожи на другие объекты для управления памятью, но не одинаковы. Когда создается блок, который обращается к локальным переменным, он создается в стеке. Это означает, что он действителен только до тех пор, пока существует его область действия. Чтобы сохранить этот блок на потом, необходимо copy это, которое копирует это в кучу. Поэтому для защиты от проблем с такими блоками вы должны скопировать, а не сохранять свой блок, прежде чем сохранить его в переменной экземпляра.

Вам придется скопировать блок, да. Блоки являются обычными объектами Objective-C.

Другие вопросы по тегам