Objective-C全球可访问方法

时间:2012-05-26 21:07:39

标签: objective-c ios cocoa-touch

在Master-Detail Xcode模板中,我在哪里定义一个函数,使其可以全局访问(由所有UIViewControllers及其子类)?

4 个答案:

答案 0 :(得分:2)

一种可能性:您可以使用该方法在UIViewController上定义类别。所以任何UIViewController现在都有这种方法。

另一种可能性:子类UIViewController并在那里写你的方法。然后从这个自定义viewcontroller子类。

编辑:

  

另外,我的MasterViewController是UITableViewController的子类,而DetailViewController是UIViewController的子类。如果我将它们子类化为自定义UIViewController,MasterViewController将失去其UITableViewController继承

您可以继承UITableViewController,并执行与UIViewController和子类相同的操作。

基本想法是以UITableViewControllerUIViewController为模板。

答案 1 :(得分: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];

答案 2 :(得分:1)

使类和方法保持静态。使用加号代替减号,例如+(void)methodName:param(ParamType *);

注意,您无法实例化此类的对象。这就像程序式编程。如果我需要相同但在不同对象和视图中更改值,我通常会使用。不过,我不是一个更适合我的方式。

答案 3 :(得分:0)

如果你有一些代码不关心什么类的对象调用它,它可能被封装到一个函数或子例程而不是一个方法。

方法是一种特殊类型的函数或子例程,它知道对象及其类。函数或子例程就像没有的全局方法。

添加了: Objective C是C编程语言的超集。所以C函数和子程序在两种语言中都是相同的。您可以在(或任何).c或.m文件中编写一个,并在.h文件中声明它以包含在您希望使用的任何位置。根据需要传递参数并从函数中获取返回值,就像方法一样(除了与任何固有的对象类无关)。

添加#2:但是既然你希望你的方法知道一些NSStreams,那么它应该是包含这些流的一些Model类(MVC范例)的方法,而不是真正的全局。将此Model对象传递给任何需要访问它的视图控制器或其他类。