2012-05-26 65 views
0

在Master-Detail Xcode模板中,我應該在哪裏定義一個函數,使其可以全局訪問(由所有UIViewControllers及其子類)?Objective-C全局訪問方法

+0

這個問題是如此模糊,它可以指半打的東西。 – vikingosegundo

+0

你是什麼意思?我想定義一個方法,一段代碼,可以通過我的應用中的任何UIViewController訪問。 – danielmhanover

+0

所以你的意思是一個方法(單身)的實例?或者你是在談論一個班級,你是否會實例化並調用對象方法?你可以要求代表團。也許你想要全局C函數。無論如何 - 你應該說清楚。 – vikingosegundo

回答

0

如果您有一些不關心對象的類調用它的代碼,它可能被封裝到函數或子例程中,而不是方法。

方法是知道對象及其類的特殊類型的函數或子例程。函數或子例程就像一個不包含的全局方法。

加入: Objective C是C編程語言的超集。所以C函數和子程序在兩種語言中都是相同的。您可以在(或任何).c或.m文件中寫入一個文件,並將其聲明在.h文件中以包含在您希望使用的任何位置。根據需要傳遞參數並從函數中獲取返回值,就像方法一樣(除了與任何固有的對象類無關)。

增加了#2:但是既然你想讓你的方法知道一些NSStreams,那麼它應該是一些包含這些流的Model類(MVC範例)的方法,而不是真正的全局性。將此Model對象傳遞給任何需要訪問它的視圖控制器或其他類。

+0

方法和函數之間有什麼區別? – danielmhanover

+0

「在面向對象編程中,方法是與類關聯的子例程(或過程或函數)。」 http://en.wikipedia.org/wiki/Method_(computer_programming) – vikingosegundo

+0

既然他們是一樣的,你到底建議我做什麼? – danielmhanover

2

一種可能性:您可以使用該方法在UIViewController上定義一個類別。所以任何UIViewController現在也有這種方法。

另一種可能性:子類UIViewController並在那裏寫你的方法。然後從這個自定義視圖控制器的子類。

編輯:

而且,我MasterViewController是的UITableViewController的子類,而DetailViewController是的UIViewController的子類。如果我他們兩個子類,以自定義的UIViewController,該MasterViewController將失去其繼承的UITableViewController

你可以繼承一個UITableViewController,做同樣的事情,與UIViewController和子類此。

基本思路是以UITableViewControllerUIViewController爲模板。

+0

這些方法的問題是,由於我的全局可訪問方法必須連接到Web服務器,它們必須共享一個NSInputStream和NSOutputStream。類別不支持變量/屬性。另外,我的MasterViewController是UITableViewController的子類,而DetailViewController是UIViewController的子類。如果我將它們繼承到一個自定義的UIViewController,那麼MasterViewController將失去它的UITableViewController繼承。 – danielmhanover

+0

編輯我的答案。在你原來的問題中,有(現在仍然是!)只是提及一個全局方法 - 與變量無關。所以請編輯你的問題以獲取更多細節。 – Pfitz

1

使類和方法靜態。使用加號而不是減去例如+(void)methodName:param(ParamType *);

請注意,您不能實例化此類的一個對象。這就像程序編程。如果我需要相同但改變不同對象和視圖的價值,我通常會使用它。儘管如此,我並沒有更好的方式爲我服務。

+0

是的,這似乎是一個好主意,但它基本上是hotpaw2說的。 – danielmhanover

2

您可以在appDelegate類中創建可通過所有應用程序訪問的方法。例如,在你的AppDelegate.h您已聲明此方法如下:

-(void)myMethod; 

在你AppDelegate.m,你把它定義爲:

-(void)myMethod 
{ 
    NSLog(@"myMethod is getting called"); 
} 

從任何其他類(碩士或細節,等等),您可以訪問myMethod的是:

#import "AppDelegate.h" 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate myMethod];