在我看来,你不要想要一个全局变量,而是一个实例变量。在这种情况下,您的声明:
@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);
}
谢谢。我实际上在另一个实例方法中声明了'sizedWordList',而不是在-init覆盖中。这可以吗? – locoboy 2011-04-19 19:29:47
@ cfarm54如果_declare_是一个实例方法中的变量,那么它是一个本地/自动变量,它只存在于该方法中。另一方面,你可以用'-init ...'以外的方法实例化你的数组,但是你需要记住在数组变得可用之前必须调用该方法。 – 2011-04-19 21:59:05