一个控制器来统治所有人



我有一个包含不同方法的助手类。我不想在我的应用程序中的每个类中都包含它的头文件。我认为这种做法是反对DNRY的。这就是为什么我决定创建一个名为AppController的"主"类,并在我的应用程序中创建每个类来继承它

以下是我所做的

AppController.h

#import <Foundation/Foundation.h>
#import "Helper.h"
@interface AppController : NSObject
{
  ivars...
}
 some methods ...
@end;

myClass.h

import "AppController.h"
@interface myClass : AppController
{
 ivars...
}
some methods
@end

到目前为止,一切都很好。当某些类需要继承的不是NSObject,而是UIViewController时,问题就会出现。这是我的AppController变得无用的时刻。我知道Objective-c不支持多重继承。我读过一些可以用作文完成的地方,但我不知道怎么做。如果有人给我举几个例子,我将不胜感激。

我读过一些可以用作文完成的地方,但我不知道怎么做。如果有人给我举几个例子,我将不胜感激。

是的,作文就是你这样做的。您的继承方法在几个层面上都是错误的。

  • 名为"AppController"的类不是正确的类。它捕获不相关的功能。一个班级应该做一件事
  • 你在强迫一个尴尬的继承树
  • 您称之为"应用程序控制器",这已经是Cocoa中一个重要对象的名称

以下是您处理此问题的方法:

  • 首先,将您的函数和方法划分为相关的组。你不应该有一个巨大的"实用程序"类。将这些函数和方法导入到需要它们的东西中,而不是导入系统中的每个类
  • 使用类别将新的实用程序功能附加到现有类(包括系统类)
  • 对于许多类似实用程序的东西,考虑函数而不是方法(但仍然要将它们拆分成相关的文件,而不是一个巨大的"utility.m")

人们通常使用"实用程序"倾倒场的绝大多数事情都可以通过ObjC中的类别和函数更好地解决。其余部分通常最好使用委派(但这是另一个主题)。

一个更好的方法是将#import "Helper.h"添加到项目的预编译头文件(YourAppName Prefix.pch)中。这样做相当于在项目的其他所有文件中导入辅助类头文件,并且只从一个位置管理它。

最新更新