2011-04-19 58 views
0

有没有一种方法来定义全局NSMutableArray?我希望能够声明数组,以便可以通过一系列实例方法访问/修改它。下面是我在下面的代码,并希望确保这是我应该如何做到的。定义全局NSMutableArray

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> { 
    NSMutableArray *sizedWordList; 
} 

在.M:

sizedWordList = [[NSMutableArray alloc] init]; 

- (void)dealloc 
{ 
    [sizedWordList release]; 
} 

回答

1

在我看来,你不要想要一个全局变量,而是一个实例变量。在这种情况下,您的声明:

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> { 
    NSMutableArray *sizedWordList; 
} 

在头文件中是正确的。然而,在实现文件中,你不能执行以下操作的实例方法之外(或者,如果它确实是一个全局变量,类方法或函数外):

sizedWordList = [[NSMutableArray alloc] init]; 

这是不在Objective-C中是合法的。初始化实例变量的正确位置是-init方法。由于类是UIViewController一个子类,你应该重写其指定的初始化器,-initWithNibName:bundle:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    self = [super initWithNibName:nibName bundle:nibBundle]; 
    if (self) { 
     sizedWordList = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

-dealloc方法几乎是正确的 - 记住,你应该总是在你-dealloc方法结束时发送[super dealloc]

- (void)dealloc 
{ 
    [sizedWordList release]; 
    [super dealloc]; 
} 

这样做后,您可以在任何其他实例方法中使用该数组。例如,

- (void)logWordList { 
    NSLog(@"%@", sizedWordList); 
} 
+0

谢谢。我实际上在另一个实例方法中声明了'sizedWordList',而不是在-init覆盖中。这可以吗? – locoboy 2011-04-19 19:29:47

+0

@ cfarm54如果_declare_是一个实例方法中的变量,那么它是一个本地/自动变量,它只存在于该方法中。另一方面,你可以用'-init ...'以外的方法实例化你的数组,但是你需要记住在数组变得可用之前必须调用该方法。 – 2011-04-19 21:59:05

0

您可以创建一个singleton和共享实例。一个单例将只允许一个类的现有实例存在。所以每个访问代码都使用相同的实例。

+1

什么是单身人士? – locoboy 2011-04-19 08:58:35

+0

我可能会在这种情况下使用单例,或者在appDelegate中设置NSMutableArray,如果它适合该类。每当我使用单例时,我使用这里显示的模式:http:// stackoverflow。com/questions/145154/what-do-your-objective-c-singleton-look-like/145232#145232 – 2011-04-19 08:59:33

+0

单例是一个只有1个实例可以存在的类。创建多个实例是不可能的。有些人认为大量使用单身人士是有害的,所以应该小心不要过度使用它。 – 2011-04-19 09:01:13

1

当然你可以创建一个类并将其导入到你想要使用的地方。

头:

#import <Foundation/Foundation.h> 

extern NSMutableArray * typesArray; 

@interface GlobalVariables : NSObject { 

} 

@end 

实施

#import "GlobalVariables.h" 

@implementation GlobalVariables 

NSMutableArray * typesArray; 

@end 

现在你有存取权限typesArray anywheare导入头

+0

超级兄弟...你是天才 – 2017-04-28 12:59:51

0

创建AppDelegate中的阵列和整个访问它的单一实例你的申请。

**YourAppDelegate *delegate = (YourAppDelegate *) [[UIApplication sharedApplication] delegate];** 

'delegate.sizedWordList' 是你的全局数组

试试吧。祝你好运。