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

问题描述 投票:2回答:4

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

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

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

要么

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

以下哪一条是正确的路径或正确的路径,以及如何以最简单的方式实施?

善良,在房间里的新编码器。

谢谢。

-Ric

iphone methods
4个回答
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

0
投票

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

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


0
投票

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.