Я читал, что если блок хочет изменить переменную снаружи, эту переменную нужно описывать с помощью ключевого слова __block
, поскольку он должен быть скопирован в кучу с самим блоком.В iOS-блоке, как изменять переменные снаружи без использования __block
Но что, если я не хочу использовать __block
и все еще могу изменить переменную, есть ли способ?
Я подумал, что, возможно, я могу установить эту переменную в global
или static
вместо auto
, чтобы она хранилась в области статической памяти.
Или я могу установить его на указатель и указать на некоторый контент, который выделяется на кучу? Я пробовал этот случай, который не работал, я хотел бы знать, почему.
Что значит быть «должно быть» и «нужно»? Чего вы пытаетесь избежать? Это не обязательно, но это может помочь с производительностью –
@ JulianF.Weinert, я понимаю, что для будущего использования ARC автоматически копирует блок с его переменными в кучу, иначе как блок, так и его переменные будут выпущены в стеке. – Boris
Да, вы можете изменять внешние или постоянные переменные внутри блока. – newacct