Я пытаюсь инициализировать глобальный NSMutableArray, к которому я могу добавить целые числа позже. Мне просто нужно знать, как и где я должен инициализировать свой массив, чтобы к нему можно было получить доступ и изменить любую функцию, которую я буду использовать позже в своей программе. Также я использую Xcode 5 и знаю, что длина массива должна быть 180.
как и где мне инициализировать глобальный NSMutableArray в Xcode 5
Ответы (4)
В вашем файле AppDelegate.h -
@property(nonatomic,retain) NSMutableArray *sharedArray;
В AppDelegate.m
@synthesize sharedArray;
В didFinishLaunchingWithOptions -
sharedArray = [[NSMutableArray alloc]init];
Сейчас,
создать общий объект AppDelegate, например
mainDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
и получить доступ к sharedArray, где вы хотите получить доступ, используя-
mainDelegate.sharedArray
Вы можете создать одноэлементный класс и определить свойство для своего массива в этом классе.
Например:
// .h file
@interface SingletonClass : NSObject
@property (nonatomic,retain) NSMutableArray *yourArray;
+(SingletonClass*) sharedInstance;
@end
// .m file
@implementation SingletonClass
+(SingletonClass*) sharedInstance{
static SingletonClass* _shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_shared = [[self alloc] init];
_shared.yourArray = [[NSMutableArray alloc] init];
});
return _shared;
}
@end
Лучше всего создать класс Singleton. В этом одноэлементном классе вы можете инициализировать массив. Позже вы можете получить доступ к этому массиву из любого класса, используя этот одноэлементный класс. Большим преимуществом является то, что вам не нужно каждый раз инициализировать объект класса. Вы можете получить доступ к массиву с помощью sharedObject.
Ниже приведен учебник для синглтонов в задаче C.
http://www.galloway.me.uk/tutorials/singleton-classes/ а>
[idArray replaceObjectAtIndex:nextIndex withObject:[NSString stringWithFormat:@"red"]];
Затем я попытался напечатать свой массив в консоли, используя nslog, но он возвращает null; поэтому я все еще неправильно инициализирую массив или неправильно использую replaceObjectAtIndex?
- person user2975241; 21.11.2013
Вы можете инициализировать свой массив в методе application:didFinishLaunchingWithOptions:
делегата приложения, так как он вызывается почти сразу после запуска вашего приложения:
// In a global header somewhere
static NSMutableArray *GlobalArray = nil;
// In MyAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
GlobalArray = [NSMutableArray arrayWithCapacity:180];
...
}
В качестве альтернативы вы можете использовать отложенное создание экземпляров:
// In a global header somewhere
NSMutableArray * MyGlobalArray (void);
// In an implementation file somewhere
NSMutableArray * MyGlobalArray (void)
{
static NSMutableArray *array = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
array = [NSMutableArray arrayWithCapacity:180];
});
return array;
}
Затем вы можете получить доступ к глобальному экземпляру массива, используя MyGlobalArray()
.
Однако это не считается хорошей практикой проектирования в объектно-ориентированном программировании. Подумайте, для чего нужен ваш массив, и, возможно, сохраните его в объекте-одиночке, который управляет связанными функциями, а не храните его глобально.