如何以及在何处初始化 Xcode 5 中的全局 NSMutableArray



我正在尝试初始化一个全局 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() 访问阵列的全局实例。

但是,这面向对象编程中不被认为是良好的设计实践。考虑一下数组的用途,并可能将其存储在管理相关功能的单一实例对象中,而不是全局存储。

最新更新