Обычный способ создать AppController / AppDelegate - добавить пользовательский объект NSO в ваш файл MainMenu / MainWindow.xib. Установите для класса AppController. Свяжите ссылку на делегат UIApplication / NSApplication с вашим объектом AppController. Тогда вы можете получить свой единственный AppController с помощью
(AppController*)[NSApp delegate];
или
(AppController*)[[UIApplication sharedApplication] delegate];
Вам никогда не придется создавать его с помощью alloc / init, потому что он будет создан при запуске вашего приложения. Вам не нужно беспокоиться о том, чтобы сделать его синглтоном, потому что никто никогда не будет пытаться создать другой. И вам не нужно беспокоиться о том, как получить к нему доступ, поскольку он будет делегатом объекта UIApplication / NSApplication.
Все это говорит о том, что если вам нужна глобальная переменная, содержащая массив слов, тогда забудьте о AppController и создайте новый одноэлементный объект, который содержит / читает массив. В этом случае вам просто нужно:
+ (NSArray *)sharedWordListArray
{
static NSArray *wordList;
if( !wordList ) {
wordList = [[NSMutableArray alloc] init];
// read array
}
return wordList;
}
Если вам действительно нужна безопасность потоков, просто вызовите [WordList sharedWordListArray] из applicationDidFinishLaunching делегата вашего приложения: метод перед запуском каких-либо потоков или добавьте NSLock, если вы действительно хотите отложить загрузку на более позднюю, но часто лучше принять время загрузки достигло начала программы, а не неожиданно, когда пользователь предпримет какое-то более позднее действие.