我正在尝试初始化一个全局 NSMutableArray,我可以稍后添加整数。我只需要知道如何以及在何处初始化我的数组,以便我稍后在程序中使用的任何函数都可以访问和更改它。我也在使用 Xcode 5,并且知道数组的长度需要为 180。
在您的 AppDelegate.h 文件中 -
@property(nonatomic,retain) NSMutableArray *sharedArray;
在 AppDelegate.m 中
@synthesize sharedArray;
In didFinishLaunchingWithOptions -
sharedArray = [[NSMutableArray alloc]init];
现在
使创建应用程序委托的共享对象,例如-
mainDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
并访问您想要访问的共享阵列
,使用-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
创建单例类是更好的选择。在此单例类中,可以初始化数组。以后,您可以使用此单一实例类从任何类访问此数组。一个很大的好处是你不需要每次都初始化类对象。您可以使用共享对象访问数组。
以下是目标 C 中单例的教程
http://www.galloway.me.uk/tutorials/singleton-classes/
> 您可以在应用程序委托的 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()
访问阵列的全局实例。
但是,这在面向对象编程中不被认为是良好的设计实践。考虑一下数组的用途,并可能将其存储在管理相关功能的单一实例对象中,而不是全局存储。