我正在尝试初始化一个全局 NSMutableArray,我可以在以后添加整数。我只需要知道我应该如何以及在哪里初始化我的数组,以便我以后在程序中使用的任何函数都可以访问和更改它。另外我正在使用 Xcode 5 并且知道该数组的长度需要为 180。
问问题
9020 次
4 回答
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
于 2013-11-15T07:20:12.613 回答
4
您可以创建一个单例类并在该类上为您的数组定义一个属性。
例如:
// .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
于 2013-11-15T07:21:34.470 回答
3
创建一个Singleton类对您来说是更好的选择。在这个单例类中,您可以初始化数组。稍后,您可以使用此单例类从任何类访问此数组。一个很大的好处是您不需要每次都初始化类对象。您可以使用sharedObject访问数组。
下面是 Objective C 中 Singletons 的教程
于 2013-11-15T07:14:29.627 回答
0
您可以在应用程序委托的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()
。
但是,这在面向对象编程中被认为不是良好的设计实践。考虑一下您的数组的用途,并可能将其存储在管理相关功能的单例对象中,而不是全局存储。
于 2013-11-15T07:15:16.297 回答