【问题标题】:Should we call a category method from self我们是否应该从 self 调用类别方法
【发布时间】:2017-02-14 05:05:01
【问题描述】:

这基本上是一个设计问题。我的应用程序中有一个包含大量代码行的控制器。我想减少行数,为此我使用了一个类别。

如果我有 UIViewController 子类并且我在该子类上创建了一个类别。现在我想从 UIViewController 子类中调用一个类别方法。

我有疑问应该调用 [self categoryMethod] 吗?

感谢您的回复!

【问题讨论】:

  • 您正在创建哪个类类别?基于此,您的呼叫将起作用。请让我们知道一点代码或类别。
  • 嗨@CodeChange 我已经编辑了我的问题。抱歉,我无法在此处添加代码。
  • 为什么不呢?您正在为您正在使用的 UIViewController 的特定实例调用方法,它不会对其他实例执行任何操作
  • 存在类别,因此可以将您的代码拆分为多个文件。理想情况下,您编写类别以对相关功能进行分组。您可以使用 self 调用该函数,如果该函数不存在,它将无法编译。

标签: ios objective-c xcode categories objective-c-category


【解决方案1】:

是的,您可以使用 self 对象作为同一类 UIVIewController 的对象调用类别方法,所以没有任何问题。

以下是我们需要类别的更多详细信息:

您使用类别来定义现有的附加方法 类——即使是你无法获得源代码的类——没有 子类化。您通常使用类别将方法添加到 现有类,例如在Cocoa frameworks 中定义的类。添加的 方法由子类继承,并且在 从类的原始方法运行时。你也可以使用 您自己的类的类别:

  • 将您自己的类的实现分布到单独的 源文件——例如,你可以将一个大的方法分组 分为几个类别,并将每个类别放在不同的 文件。
  • 声明私有方法。

通过在接口文件中声明方法来向类添加方法 在类别名称下并在实现文件中定义它们 同名。类别名称表示方法是 对在别处声明的类的扩展,而不是新类。

因此,根据此描述,您可以将 UIViewController 代码以小块(文件)的形式分发为 category,并在您的班级中调用它。

另一种减少单类代码的方法是将ViewController 分成一小部分,例如您有TableViewHeader ViewFooter ViewNavigation View,这样您就可以创建所有视图的子类和将相关代码写入相应的类中,主ViewController 类仅包含数据传递和通用方法。

使用ContainerView 是分发UI 和代码的最佳做法。

希望这将帮助您了解您的需求!

快乐编码。

【讨论】:

  • 很好的答案,在访问类别中 viewController 的私有属性时遇到问题。如果您提供任何更有用的演示代码或链接。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多