Как я объявляю массив как константу в Цели-c?

Следующий код дает мне ошибки:

//  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'

63
задан FreeAsInBeer 8 November 2011 в 22:20
поделиться

1 ответ

Короче говоря, нельзя. Объекты Objective-C, за исключением констант NSString, создаются только во время выполнения, и поэтому вы не можете использовать выражение для их инициализации.

Существует несколько подходов.

(1) Объявить NSArray *testArray без ключевого слова const и затем иметь часть кода, устанавливающего значение, которое вызывается очень рано во время жизненного цикла приложения.

(2) Объявить удобный метод класса, который возвращает массив, затем использовать static NSArray *myArray в этом методе и рассматривать его как синглтон (ищите на SO по запросу "objective-c singleton" и найдете около миллиарда ответов о том, как инстанцировать).

69
ответ дан 24 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: