【问题标题】:Is it possible to split public methods in categories?是否可以按类别拆分公共方法?
【发布时间】:2014-02-03 18:07:02
【问题描述】:

现在我想将包含公共方法的 ViewController 拆分为多个文件,以便于管理和导航。我知道类别可以做到这一点,但它主要是通过在每次您想要使用它们时导入类别来使用。我正在处理的 ViewController 意味着要被子类化很多次,所以这不是一个真正的选择。

我想要实现的是将这些公共方法分门别类,将所有这些类别合并到一个文件中,在头文件中导入,以确保子类不需要一次又一次地导入。

有没有办法做到这一点?我四处寻找,但我发现的只是:

  1. 在同一个头文件中声明类别,在多个实现文件中声明它们
    这不是我要找的,因为我大量记录我的内联代码以利用 XCode 5 显示内联文档的能力。由于所有文档,使用 Ctrl+6 不使用 导航类已经是一场噩梦般的迷宫。它会缓解实现文件的问题,但不是我想要的。

  2. 在拆分标题中声明类别
    我发现的所有相关内容仅供该类中的私人使用(在实现文件中导入类别)。我还需要拆分公共方法并让它们可供子类查看。

我考虑过创建一个导入所有类别的类,本质上隐藏了实际的类,但这会将我与受保护的变量隔离开来(我需要这些)。

有没有...的解决方案,或者对于当前的 Objective C 来说这真的不可能吗?

编辑: 我听说 DocSets 是 Apple 允许他们在不记录内联代码的情况下显示文档的方式。如果使用 DocSet 允许我清理我的标头代码(即,将文档移至其他位置)并且在快速帮助中仍然有可用的文档,我想了解这一点

【问题讨论】:

  • 你可能是更好的服务器解释为什么你有这么多子类 - 在更高级别改变你的方法可能会更好......
  • @Wain 每个子类都是他们自己的页面。这些页面都有相似的需求,所以我将这些需求分组到一个 ViewController 中,并通过子类化基本 ViewController 来创建每个页面,并根据自己的特定需求单独修改每个页面(子类)
  • 您可以拥有一个“伞”.h 文件,该文件将类标头与所有(公共)类别标头一起导入,即您的 #2 应该可以工作。

标签: ios objective-c


【解决方案1】:

我决定只拆分实现文件。为多个标题重构类花费了更长的时间,而且比我预期的要难。我认为我发布的场景无法以我希望的方式解决。

【讨论】:

    【解决方案2】:

    在单独的头文件中声明您的类别。编写另一个头文件,其唯一目的是#include 每个具有公共 API 的类别头文件。编写子类时使用该单个头文件。编写另一个包含单个公共文件和任何其他私有类别标题的头文件,供您内部使用。

    这类似于框架对其类所做的事情。 Foundation 的类在单独的文件 NSObject.h、NSArray.h 等中声明。然后 Foundation/Foundation.h 包含公共类的每个头文件。

    【讨论】:

    • Foundation 是单个类的集合,类别是同一实体的一部分。由于原始类使用受保护的变量,因此执行您的建议需要我将原始类实现为与被子类化的实体不同的实体,并且必须将原始受保护的变量实现为公共属性,我不是故意的
    【解决方案3】:

    在这种情况下,我会在父类的 .h 中导入必要的类别,这样子类也可以获取类别。

    【讨论】:

    • 问题是,如果我在父类的.h中包含头文件,它就构成循环引用(类别导入主类,主类导入类别),我不能使用它,我试过了
    猜你喜欢
    • 2020-11-08
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2019-03-29
    • 1970-01-01
    • 2011-02-19
    • 2018-03-30
    相关资源
    最近更新 更多