在我看來,你不要想要一個全局變量,而是一個實例變量。在這種情況下,您的聲明:
@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