Ios 在使用category拆分大型类时,category抱怨未声明的选择器

Ios 在使用category拆分大型类时,category抱怨未声明的选择器,ios,objective-c,objective-c-category,Ios,Objective C,Objective C Category,我在一个视图控制器上工作,它有一个很长且不恰当的视图设置方法。 为了保持清洁,此视图设置代码被移动到一个类别,仅用于视图设置 此类别引用原始视图控制器中的私有选择器,Xcode显示警告:未声明的选择器“xyz:” 在我看来,我有这些选择,但没有一个是好的: 别提警告,闭上眼睛 通过在头文件中声明公开私有选择器 在原始VC头文件中声明第二个类别,作为我的第一个类别的子类别 我已经选择了最后一个选项,但我仍然有这种感觉,好像我必须去大便或什么的。这里的最佳做法是什么?您可以在类别实现中向私有方法

我在一个视图控制器上工作,它有一个很长且不恰当的视图设置方法。 为了保持清洁,此视图设置代码被移动到一个类别,仅用于视图设置

此类别引用原始视图控制器中的私有选择器,Xcode显示警告:
未声明的选择器“xyz:”

在我看来,我有这些选择,但没有一个是好的:

  • 别提警告,闭上眼睛
  • 通过在头文件中声明公开私有选择器
  • 在原始VC头文件中声明第二个类别,作为我的第一个类别的子类别

我已经选择了最后一个选项,但我仍然有这种感觉,好像我必须去大便或什么的。这里的最佳做法是什么?

您可以在类别实现中向私有方法添加声明

因此在
CustomViewController+ViewSetup.m

@interface CustomViewController (private)

// declare private methods and properties here which you know exist in CustomViewController.m

@end

但总的来说,我认为你对这个类别所做的一切是不必要的。您可以在原始文件中清理代码,而不需要类别文件来管理和维护。更不用说,如果您更改了任何私有方法签名,而忘记在类别中更改它,编译器不会警告您,当您尝试调用其中一个方法时,您会看到崩溃。

我想到了将实现从Apple页面的categories:
中分离出来,并将方法添加到现有类中,您还可以使用类别将复杂类的实现拆分为多个源代码文件关于私有方法签名中的更改不会触发编译器警告的说法是正确的。也许是我开始使用代码折叠的时候了,直到现在我一直在避免使用代码折叠。是否有其他方法可以在不使用代码折叠的情况下清除原始文件中的代码?