2013-01-16 60 views
1

我將不勝感激您的意見,使用方法的,如今,下面的代碼的訪問全局變量,在iOS 5及以上創建一個應用程序iOS應用代理

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 

是上述視爲面向對象編程?

回答

4

我不會問是否考慮面向對象的編程。面向對象編程是關於使用具有屬性和方法的交互對象的單獨主題。這與你的問題無關 - 這是使用訪問AppDelegate中的全局變量。

我覺得你真的問的是,如果它是良好的編程風格使用的代碼行放置在AppDelegate的全局變量,然後在任何地方訪問這些變量在程序(如不同的視圖控制器)

ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 

AppDelegate實際上只是一個「偵聽器」類。該類具有在應用程序更改狀態時調用的委託方法,例如啓動,進入後臺,終止等。這是應用程序響應這些應用程序狀態更改的機會,應該以這種方式使用它。

將全局變量放在AppDelegate中可能看起來很有用的原因是因爲AppDelegate實際上是一個可以在應用程序的任何位置訪問的共享類(單例)。但是,這仍然沒有打算保存全局變量。

這實際上只取決於您的應用程序的體系結構以及您如何遵循模型 - 視圖 - 控制器範例。下面是一個例子:如果要在AppDelegate中實現CoreLocation以獲取用戶的位置,則可以從項目中的任何其他類訪問用戶位置數據。但是,您可以輕鬆地擁有一個單獨的位置管理器類,然後使用NSNotification通知其他類已找到新位置。第三種可能性是使位置管理器類成爲共享單例,然後訪問全局數據。最後,所有這三項工作都取決於您如何構建您的應用程序。

但是,我會盡我所能保持AppDelegate特定於響應應用程序狀態的更改。我會避免在AppDelegate中放置太多的全局變量,因爲它不是AppDelegate的用途。

+0

感謝您的時間和我提到OOP的方式,考慮到可能無關緊要的數據所有權; –

+0

沒問題,請接受答案,如果沒有別的東西你正在尋找 –

+1

許多程序員試圖通過創建可以通過某種消息傳遞系統相互通信的組件來解耦他們的體系結構。理解所有這些系統最終都依賴於處理從一個組件到另一個組件傳遞數據的某種中央節點是很重要的。 PureMVC例如具有Facade的概念。我經常使用AppDelegate來扮演類似的角色。 –