Я бы держался подальше от синглетонов . Поскольку массив - это некая модель (в смысле Модель-Представление-Контроллер), другие классы должны зависеть от него:
@interface ControllerA : UIViewController {}
@property(retain) NSArray *array;
@end
@interface ControllerB : UIViewController {}
@property(retain) NSArray *array;
@end
Теперь вопрос меняется на «как мне предоставить зависимость». Вы можете сделать это с помощью Interface Builder или предоставить массив при построении зависимых объектов. Например, у меня иногда есть метод с именем setupObjectGraph
в моем делегате приложения, который создает экземпляры классов и соединяет их вместе:
- (void) setupObjectGraph
{
mainController = [[MainController alloc] init…];
[mainController setThis…];
[mainController setThat…];
OtherController *bar = [[OtherController alloc] init…];
[bar setThis…];
[bar setThat…];
[mainController setBar:bar];
[bar release];
…
}
- (void) applicationDidFinishLaunchingOrWhatever
{
[self setupObjectGraph];
[window addSubview:[mainController view]];
[window makeKeyAndVisible];
}
Это не идеально (оно не очень хорошо масштабируется), но оно работает для многих приложений и намного лучше, чем синглтоны. Это звучит как мелочь, но сильно влияет на ваш общий дизайн, поэтому имеет смысл подумать.