Ответ 1
Поскольку [NSArray arrayWithArray: self.container.objects ]
не является константой времени компиляции, это выражение, которое должно оцениваться во время выполнения. В C и Objective-C переменные внутри функций должны быть инициализированы с помощью констант времени компиляции, тогда как С++ и Objective-C ++ являются более снисходительными и допускают постоянные константы без компиляции.
Скомпилируйте свой код как Objective-C ++ или переформатируйте его таким образом:
static NSArray *localArray = nil;
if (localArray == nil)
localArray = [NSArray arrayWithArray: self.container.objects ];
Что довольно похоже на код, который компилятор будет генерировать под капотом для переменной static
, инициализированной постоянной константой компиляции, в любом случае (на самом деле он использовал бы второй глобальный флаг, указывающий, было ли это значение инициализируется, а не использует значение дозорного значения, например nil
здесь, в этом случае мы предполагаем, что localArray
никогда не будет nil
). Вы можете проверить свою разборку компилятора для этого, если хотите.