在 Master-Detail Xcode 模板中,我在哪里定义一个可以全局访问的函数(所有 UIViewController 及其子类)?
4 回答
UIViewController
一种可能性:您可以使用该方法定义一个类别。所以UIViewController
现在任何人也有这种方法。
另一种可能性:子类 aUIViewController
并在那里编写你的方法。然后从这个自定义视图控制器子类化。
编辑:
另外,我的 MasterViewController 是 UITableViewController 的子类,而 DetailViewController 是 UIViewController 的子类。如果我将它们都子类化为自定义 UIViewController,则 MasterViewController 将失去其 UITableViewController 继承
您可以将 a 子类化并从 thisUITableViewController
中对 and 子类执行相同的操作。UIViewController
基本思想是将 aUITableViewController
和 aUIViewController
作为模板。
您可以在 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 *);
。
请注意,您不能实例化此类的对象。这就像过程编程。如果我在不同的对象和视图中需要相同但不断变化的值,我通常会使用它。不过,我没有更好的方法对我有用。
如果您有一些代码不关心什么类的对象调用它,它可能被封装到函数或子例程而不是方法中。
方法是了解对象及其类的特殊类型的函数或子例程。函数或子例程就像一个全局方法,但没有。
补充:Objective C 是 C 编程语言的超集。因此,两种语言中的 C 函数和子例程都是相同的。您可以在(或任何).c 或 .m 文件中编写一个,然后在 .h 文件中声明它以包含在您希望使用的任何位置。根据需要传递参数并从函数中获取返回值,就像方法一样(除了与任何固有的对象类无关)。
添加#2:但是由于您希望您的方法了解一些 NSStream,那么它可能应该是包含这些流的某个模型类(MVC 范式)的方法,而不是真正的全局方法。将此模型对象传递给任何需要访问它的视图控制器或其他类。