Следующий код дает мне ошибки:
// constants.h
extern NSArray const *testArray;
// constants.m
NSArray const *testArray = [NSArray arrayWithObjects: @"foo", @"bar", nil];
Ошибка, которую я получаю,
initializer element is not constant
Или если я убираю стрелочный индикатор (*), я добираюсь:
statically allocated instance of Objective-C class 'NSArray'
Короче говоря, нельзя. Объекты Objective-C, за исключением констант NSString, создаются только во время выполнения, и поэтому вы не можете использовать выражение для их инициализации.
Существует несколько подходов.
(1) Объявить NSArray *testArray
без ключевого слова const
и затем иметь часть кода, устанавливающего значение, которое вызывается очень рано во время жизненного цикла приложения.
(2) Объявить удобный метод класса, который возвращает массив, затем использовать static NSArray *myArray
в этом методе и рассматривать его как синглтон (ищите на SO по запросу "objective-c singleton" и найдете около миллиарда ответов о том, как инстанцировать).