繁体   English   中英

Objective-C全球可访问方法

[英]Objective-C Globally Accessible Method

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

一种可能性:您可以使用方法在UIViewController上定义类别。 因此,任何UIViewController现在也具有此方法。

另一种可能性:子类化UIViewController并在其中编写方法。 然后从此自定义ViewController继承子类。

编辑:

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

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

基本思想是将UITableViewControllerUIViewController作为模板。

您可以在appDelegate类中创建可通过所有应用程序访问的方法。 例如,在您的AppDelegate.h中,您已声明此方法如下:

-(void)myMethod;

在您的AppDelegate.m中,将其定义为:

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

从任何其他类(Master或Detail等)中,您可以通过以下方式访问myMethod:

#import "AppDelegate.h"

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

使类和方法静态。 使用加号而不是减号,例如+(void)methodName:param(ParamType *);

注意,您不能实例化此类的对象。 就像过程编程一样。 如果在不同的对象和视图中需要相同但不断变化的值,我通常会使用。 不过,对于我来说,没有更好的方法。

如果您有一些代码不关心对象的类是什么,则可能会将其封装到函数或子例程中,而不是方法中。

方法是一种了解对象及其类的特殊类型的函数或子例程。 函数或子例程就像没有的全局方法一样。

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

补充#2:但是,由于您希望您的方法了解一些NSStream,因此它可能应该是某些Model类(MVC范例)的方法,其中包含这些流,而不是真正的全局方法。 将此Model对象传递给任何需要访问它的视图控制器或其他类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM