2009-05-05 62 views
2

我一直在製作幾個應用程序,我知道我的方式。總是讓我困惑的是訪問全局屬性,以及設置它們的最佳位置。我有幾個關於訪問事物和如何訪問它們的問題。最佳應用代表實踐

您是否必須將您的應用程序委託頭文件包含到您要訪問的任何其他文件中?假設我有一個視圖控制器,我想使用它,是否需要在視圖控制器的.h中包含.h?或者,我可以設置:

@class AppDelegate; 

你能只通過鍵入進出委託:

[UIApplication sharedApplication].delegate 

每一次?那是我必須習慣的嗎?或者,我可以設置我的實現在每個.H如下:

AppDelegate *delegate; 

而且init函數內部,把單實例變量?

對不起,如果這是結構,但我認爲這是一個邏輯問題,人們遇到和解決問題。

+0

什麼樣的「全球屬性」?這樣的東西通常可以設計得更好,而無需一直訪問應用程序委託或任何其他共享結構。 – zoul 2009-05-05 05:55:23

+0

我不是專門討論應用程序委託,但說我有一個視圖控制器,推動另一個,我想推動的東西都是從一個控制器到下一個。 – Garrett 2009-05-05 21:02:53

回答

5

也許您需要重新考慮您如何使用App Delegate?在我看來,也許你沒有做出很好的課堂設計。

無論如何,這裏有一個簡單的方法。不要把它放在init中,只是在需要時使用它。

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

自然地,將MyAppDelegate替換爲應用程序委託的實際類名。

0

另一種可能性是添加代碼,使用正確鑄造的應用程序委託引用作爲應用程序委託頭文件中#define,所以包括它之後,你可以這樣做:

MYAPPDELEGATE.customProperty = blah; 

但是我傾向於贊成只是寫出John提供的界限,因爲#define的使用會混淆代碼完成,而我覺得這比輸入行更煩人。如上所述,如果您有大量的應用程序委託引用,您可能需要重新構建這些引用以使其中的某些引用更靠近家中。