一个控制器来统治它们

时间:2012-02-02 18:15:17

标签: objective-c ios

我有一个包含不同方法的辅助类。我不想在我的应用程序中的每个类中都包含它的头文件。我觉得这种做法是对抗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不支持多重继承。我已经阅读过可以使用合成完成的地方,但我无法弄清楚如何做到这一点。 如果有人给我一些例子,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

  

我已经阅读过可以使用合成完成的地方,但我无法弄清楚如何做到这一点。如果有人给我一些例子,我将不胜感激。

是的,组成是你如何做到这一点。你的继承方法在几个层面都是错误的。

  • 您的类“AppController”不是一个合适的类。它捕获不相关的功能。一堂课应该做一件事。
  • 你强迫一个尴尬的继承树
  • 你称它为“app controller”,它已经是Cocoa中一个重要对象的名称。

以下是您如何做到这一点:

  • 首先,将您的功能和方法拆分为相关组。你不应该有一个巨大的“实用”类。将这些函数和方法导入到需要它们的东西中,而不是系统中的每个类。
  • 使用categories将新的实用程序功能附加到现有类(包括系统类)。
  • 考虑功能而不是许多类似实用程序的方法(但仍然将它们分成相关文件,而不是一个巨大的“Utility.m”)。
通过ObjC中的类别和功能,人们通常会使用“实用”倾倒场的绝大多数事物都能更好地解决。其余的通常最好使用委托(但这是另一个主题)。

答案 1 :(得分:2)

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