如何在Objective-C中的视图控制器之间共享公共方法?

时间:2011-03-27 01:33:10

标签: iphone methods

在我的应用程序中有许多视图控制器,它们有各自的用途。但是,在它们下面确实需要共同的维护工作,这些工作可以使用相同的方法代码,而不是每个都有自己的代码副本,字面上粘贴在其中。

有没有办法分享这些常用方法的代码?我看到两种可能性:

1)一个代码副本在内存中真正共享,如方法的特殊维护对象

2)在一段代码中写入一次,但每个视图根据需要分配多次。

这些是正确的路径或正确的路径,以及如何以最简单的方式实施?

善良,请在房间里找到新的编码员。

感谢。

-Ric

4 个答案:

答案 0 :(得分:11)

  

注意:这是一个反映当时Apple实践的旧问题/答案,并为寻找他们可以理解的简单解决方案的新编码员提供了答案(根据问题的要求)。使用composition,有更好,更可测试的方法来实现这一目标。

实现所需目标的最佳方法是为视图控制器创建公共父类。因此,不是直接从UIViewController继承,而是每个自定义类都将继承自SomeFeatureViewController(其中SomeFeature描述所提供的常用功能),此类继承自UIViewController。现在,每个实际的视图控制器都将继承自SomeFeatureViewController,并且任何常用方法(也可以是这些方法使用的任何常见实例变量)都可以放在此父类中。

@interface SomeFeatureViewController : UIViewController
{
    int common_iVars;
}
- (void)commonMethods;
@end

@interface ActualViewController : SomeFeatureViewController
{
    int specific_iVars;
}
- (void)specificMethods;
@end

答案 1 :(得分:0)

正如jhabbott所说,UIViewController的子类是一个很好的解决方案。

如果那不是一个选项(例如你不能改变类层次结构),另一个选择是在UIViewController上创建一个category来添加你需要的方法和属性。这将使您的方法在每个UIViewController上都可用,包括所有标准子类,而无需您做任何额外的工作。使用此解决方案,您无法直接添加ivars,尽管您可以使用associative references对其进行充分假设。

答案 2 :(得分:0)

好吧,我最终做的是创建一个Singleton对象并将所有常用方法放在那里。这意味着我的所有View控制器都可以使用Singleton的常用方法。如果项目是由程序员团队开发的话,这可能有点过于开放,但正如我所知,所有控制器在处理方面都有类似的要求。所以Singleton方法似乎有效。

它也适合项目,因为在问题发生时所有的View控制器都已创建并使它们成为父类的子类似乎是一种改进,尽管我同意如果是初始设计的一部分,那么可能是一个更好的方法。我非常感谢有时间回答的3人。

答案 3 :(得分:-1)

我看到它的方式你应该用所有常用方法做一个类,然后继承它。假设你有MyCommonViewController:UIViewController然后为每个不同的视图控制器做MySpecificVIewController:MyCommonViewController