繁体   English   中英

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

[英]How do I share common methods between view controllers in Objective-C?

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

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

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

要么

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

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

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

谢谢。

-Ric

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

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

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

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

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

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

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

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

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

暂无
暂无

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

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