2011-04-19 82 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' 是你的全局數組

試試吧。祝你好運。