Как сделать Глобальный Массив?

Так, я читал это сообщение, и это в значительной степени точно, что я искал. Однако... это не работает. Я предполагаю, что не собираюсь идти с одноэлементным объектом, а скорее делаю массив или в файле Global.h или вставляю его в _Prefix файл.

Оба раза я делаю это, хотя, я получаю ошибку:

Ожидаемый список спецификатора спецификатора прежде 'статичный'

и это не работает. Так... Я не уверен, как заставить это работать, я могу удалить экстерна, и это работает, но я чувствую, что мне нужно это для создания этого константой.

Конечная цель должна иметь этот Изменяемый Массив быть доступной от любого объекта или любого файла в моем проекте. Справка ценилась бы!

Это - код для моего файла Globals.h:

#import 

static extern NSMutableArray * myGlobalArray;

Я не думаю, что мне нужно что-либо в файле реализации. Если я должен был поместить это в файл префикса, ошибка была тем же.

Править

Так, я удалил.m файл из Globals, и у меня просто есть код о в Globals.h. Принятие я собираюсь продолжить эту ужасную практику наличия глобальных переменных (я знаю, что это плохо, я просто, хочет проверить это), у меня теперь есть новая ошибка. Это говорит:

"Несколько классов памяти в спецификаторах объявления"

Если я удаляю "экстерна", это работает и если я удаляю "статичный", это работает, но имеющий обоих не делает... что теперь?

**** Двойное Редактирование ****

Правильно, таким образом, я попытался добавить массив к своему Делегату UIApplication, но я делаю его неправильно, потому что он не работает. Кто-то мог дать мне некоторый пример кода как, туда, где поместить его доступ он? Я не знаю, должно ли это войти в реализацию, или где-то в другом месте, и после того как массив инициализируется, как получить доступ к нему из других файлов... Я устанавливаю новую переменную на массив или что-то?

5
задан Community 23 May 2017 в 10:32
поделиться

6 ответов

Это то, что я искал:

http://derekneely.com/tag/app-delegate/

Спасибо, что указали меня в правильном направлении!

1
ответ дан 13 December 2019 в 22:05
поделиться

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

Вместо этого создайте объект с массивом внутри него и сделайте этот объект синглтоном (или, что еще лучше, создайте для него фабрику).

Всякий раз, когда вы хотите изменить массив, вызывайте методы объекта, чтобы сделать это. Если вы сделаете это, я готов поспорить, что вы найдете много избыточного кода, который можно поместить в этот объект (например, поиск значения в массиве - сделайте метод "search" в объекте и передайте значение).

Это может показаться большой работой, которую вы не должны делать, но вы обнаружите, что это довольно забавная работа, и вы обнаружите, что вы ДОЛЖНЫ ее делать, когда увидите, сколько кода содержится в этом объекте...

3
ответ дан 13 December 2019 в 22:05
поделиться

В общем, наличие файла "Globals.h" - неприятный запах того, что работает антипаттерн.

Я бы даже посоветовал не советоваться с Биллом К. и вообще не использовать шаблон Singleton.

Вместо этого создайте массив в делегате вашего приложения и передайте его контроллеру (-ам) корневого представления и по иерархии компонентам, которым требуется доступ к нему.

1
ответ дан 13 December 2019 в 22:05
поделиться
#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;

@interface Globals : NSObject {
}


@end
0
ответ дан 13 December 2019 в 22:05
поделиться

два (основных) способа сделать массив глобальным являются отдельными - либо у вас есть класс с методом

static NSMutableArray *foo;
+(NSMutableArray *)foo {
    return foo;
}

(в файле .m) со статической частью НЕ в файле заголовка, либо просто

static extern NSMutableArray * myGlobalArray;

без singleton wrapper (который, как мне кажется, лучше, так как избавляет вас от лишнего лишнего кода)

В любом случае, это все еще плохая практика, которой я бы постарался избежать.

2
ответ дан 13 December 2019 в 22:05
поделиться

Просто добавьте массив как свойство делегата приложения и получите к нему доступ, например:

[[UIApplication sharedApplication] myArray];
3
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

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