ios - cómo y dónde inicializo un NSMutableArray global en Xcode 5
initialization xcode5 (4)
Crear una clase Singleton es la mejor opción para usted. En esta clase singleton, puede inicializar la matriz. Más tarde, puede acceder a esta matriz desde cualquier clase utilizando esta clase singleton. Un gran beneficio es que no necesita inicializar el objeto de clase cada vez. Puede acceder a la matriz utilizando un objeto compartido .
A continuación se muestra un tutorial para Singletons en el objetivo C
Intento inicializar un NSMutableArray global que pueda agregar enteros para más adelante. Solo necesito saber cómo y dónde debo inicializar mi matriz para que se pueda acceder y modificar mediante cualquier función que use más adelante en mi programa. También estoy usando Xcode 5 y sé que la matriz debe tener 180 de longitud.
En su archivo AppDelegate.h -
@property(nonatomic,retain) NSMutableArray *sharedArray;
En AppDelegate.m
@synthesize sharedArray;
En didFinishLaunchingWithOptions -
sharedArray = [[NSMutableArray alloc]init];
Ahora,
hacer crear un objeto compartido de AppDelegate como-
mainDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
y acceda a sharedArray donde quiera acceder usando-
mainDelegate.sharedArray
Puede inicializar su matriz en el método de la application:didFinishLaunchingWithOptions:
del delegado de application:didFinishLaunchingWithOptions:
ya que se llama mucho más o menos inmediatamente después de que se inicia su aplicación:
// In a global header somewhere
static NSMutableArray *GlobalArray = nil;
// In MyAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
GlobalArray = [NSMutableArray arrayWithCapacity:180];
...
}
Alternativamente , puede usar instancias perezosas :
// 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;
}
A continuación, puede acceder a la instancia global de la matriz utilizando MyGlobalArray()
.
Sin embargo, esto no se considera una buena práctica de diseño en la programación orientada a objetos . Piense en para qué sirve su matriz y, posiblemente, guárdela en un objeto único que gestione la funcionalidad relacionada, en lugar de almacenarla globalmente.
Puede crear una clase singleton y definir una propiedad para su matriz en esa clase.
por ejemplo:
// .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