5

我正在尝试初始化一个全局 NSMutableArray,我可以在以后添加整数。我只需要知道我应该如何以及在哪里初始化我的数组,以便我以后在程序中使用的任何函数都可以访问和更改它。另外我正在使用 Xcode 5 并且知道该数组的长度需要为 180。

4

4 回答 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 的教程

http://www.galloway.me.uk/tutorials/singleton-classes/

于 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 回答