Нужно ли сохранять блоки в Objective-C для iOS?
Я хотел бы создать метод, который принимает блок, сохраняет его в элементе, запускает асинхронную задачу и затем вызывает блок, когда асинхронный вызов выполняет обратный вызов завершения.
Должен ли я сохранить блок? Управляется ли память блоков так же, как и любой другой объект? Могу ли я синтезировать свойство, чтобы держать блок?
2 ответа
Блоки похожи на другие объекты для управления памятью, но не одинаковы. Когда создается блок, который обращается к локальным переменным, он создается в стеке. Это означает, что он действителен только до тех пор, пока существует его область действия. Чтобы сохранить этот блок на потом, необходимо copy
это, которое копирует это в кучу. Поэтому для защиты от проблем с такими блоками вы должны скопировать, а не сохранять свой блок, прежде чем сохранить его в переменной экземпляра.
Вам придется скопировать блок, да. Блоки являются обычными объектами Objective-C.