2016-07-22 2 views
0

Я читал, что если блок хочет изменить переменную снаружи, эту переменную нужно описывать с помощью ключевого слова __block, поскольку он должен быть скопирован в кучу с самим блоком.В iOS-блоке, как изменять переменные снаружи без использования __block

Но что, если я не хочу использовать __block и все еще могу изменить переменную, есть ли способ?

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

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

+1

Что значит быть «должно быть» и «нужно»? Чего вы пытаетесь избежать? Это не обязательно, но это может помочь с производительностью –

+0

@ JulianF.Weinert, я понимаю, что для будущего использования ARC автоматически копирует блок с его переменными в кучу, иначе как блок, так и его переменные будут выпущены в стеке. – Boris

+1

Да, вы можете изменять внешние или постоянные переменные внутри блока. – newacct

ответ

0

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

Пожалуйста, исправьте меня, если есть какая-либо ошибка, и я пометю себе ответ, если нет лучшего.