2010-03-19 61 views
5

所以,我讀了this post,這幾乎就是我正在尋找的東西。但是...它不起作用。我想我不打算去單身人士的對象,而是在Global.h文件中創建數組,或將其插入到_Prefix文件中。如何製作全局數組?

兩次都是我做,雖然,我得到的錯誤:

之前的預期「靜態」

,它不起作用符限定符列表。所以......我不知道如何讓它工作,我可以刪除外部和它的作品,但我覺得我需要它,使其不斷。

最終目標是讓這個可變數組可以從任何對象或我的項目中的任何文件訪問。幫助將不勝感激!

這是我的Globals.h文件的代碼:

#import <Foundation/Foundation.h> 

static extern NSMutableArray * myGlobalArray; 

我不認爲我需要在實現文件中任何事情。如果我把它放在前綴文件中,錯誤是一樣的。

編輯

所以,我刪除從全局.m文件,我只是有關於在Globals.h代碼。假設我將繼續這種有全局變量的可怕做法(我知道這很糟糕,我只想測試一下),現在我有一個新的錯誤。它說:

「多個存儲類聲明指定」

如果我刪除「外部」它的工作原理,如果我刪除「靜態」它的工作原理,但同時具有不...現在怎麼辦?

****雙編輯****

韙,所以我嘗試添加該陣列我的UIApplication代表,但我做錯了,因爲它無法正常工作。有人可以給我一些示例代碼,以便將它放置在哪裏嗎?我不知道它是否應該在實現中或其他地方,並且一旦數組被初始化後如何從其他文件訪問它...我是否爲數組設置了一個新變量?

+0

你可以發佈你的代碼嗎? – 2010-03-19 23:48:56

回答

3

只是一個普通的編程建議 - 不要共享一個數組。你無法控制它,如果某件事發生了某種改變,並且以你沒有預料到的方式進行改變,它幾乎是不可能的。

相反,創建一個對象與數組裏面,並使該對象一個單身人士(或更好的,使它的工廠)。

無論何時您想要修改數組,請調用對象上的方法來執行此操作。如果你這樣做,我敢打賭你會發現很多冗餘代碼可以放入這個對象中(例如,在數組中搜索一個值 - 在對象中創建一個「搜索」方法,並傳入一個值)。

看起來您應該不需要做很多工作,但是您會發現這是相當有趣的工作,並且您應該發現一旦您看到此代碼中包含多少代碼就必須執行此操作目的...

2

兩個(主)製作的陣列全球的方式是分離的 - 或者你有一類的方法

static NSMutableArray *foo; 
+(NSMutableArray *)foo { 
    return foo; 
} 

(在.m文件)與靜態片NOT在頭文件,或者只是

static extern NSMutableArray * myGlobalArray; 

與出單包裝(我認爲這是更好,因爲它可以讓您免於不必要的代碼額外位)

無論哪種方式,它仍然是一個不好的做法ŧ我會盡量避免的帽子。

0
#import <Foundation/Foundation.h> 

static extern NSMutableArray * myGlobalArray; 

@interface Globals : NSObject { 
} 


@end 
1

通常情況下,「Globals.h」文件的存在是一種難聞的氣味,工作中存在反模式。

我甚至會建議反對Bill K的建議,而不是使用Singleton模式。

取而代之的是,在您的應用程序委託中創建數組,並將其傳遞到您的根視圖控制器,並沿着層次結構傳遞給需要訪問它的組件。

3

只需將陣列添加爲應用程序委託的財產,並獲得它喜歡:

[[UIApplication sharedApplication] myArray];