Когда оптимизация компилятора включена, переменные часто «оптимизируются», помещая их в регистры или другие приемы, такие как переупорядочение операторов. Если вы используете какой-либо флаг -O
, отличный от -O0
, это может произойти.
Я не думаю, что добавление дополнительных ссылок на переменную в вашем коде предотвратит это. (Во всяком случае, компилятор может попробовать еще больше, так как потенциальная выгода от его оптимизации больше).
В качестве временного обходного пути вы можете объявить переменную «volatile». Как правило, это не является хорошим долгосрочным решением, поскольку оно не позволяет компилятору выполнять какие-либо оптимизации с использованием этой переменной.
Другой обходной путь - использовать старомодное ведение журнала. Что-то вроде:
NSLog(@"Entries initialized as: %@", tlEntries);
Наконец, вы также можете скомпилировать с -O0
. Многие люди рекомендуют это для профиля проекта Debug . Хотя это предотвращает оптимизацию, оно значительно облегчает отладку. Пошаговые инструкции на самом деле предсказуемы, и переменные могут быть просмотрены. К сожалению, он имеет довольно неприятный побочный эффект с версией gcc, которую поставляет Apple: когда действует -O0
, вы не можете получать предупреждения об использовании переменных до инициализации. (Лично я нахожу это предупреждение достаточно полезным, так что я готов испытать боль от отладки, будучи менее удобным.)
P.S. В опубликованном фрагменте есть утечка памяти; для ясности следует добавить дополнительную строку:
[tlEntries release];