Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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