1

我有一个协议 P

@protocol P<NSObject>
{

-(void)foo;

@optional

-(void)bar;

}

而且我有很多课程(比如说一打)。所有这些类都实现了协议 P。其中大约一半实现了方法bar,所有 bar 实现完全相同。

分享实现的最佳方式是什么

明显的想法:

1)创建一些将实现方法bar并让其他类继承它的基类。

实现起来很简单。但是,我不是这个想法的忠实粉丝。我更喜欢类层次结构来表示实体泛化/规范,而不是代码重用。

2)创建一个助手并从所有需要实现bar方法的类中调用它

行。有用。但是,如果 bar 的实现很小(在我的例子中是几行),那么我们将有比代码本身更多的开销(帮助类和从每个类中调用它)。

还有其他(更好的)方法吗?

4

1 回答 1

4

以下是在类之间共享方法实现的几种方法:

  1. 遗产。您可以使您的所有类都从实现共享方法的公共基类继承。UIViewController但是,例如,如果您需要从类 A 继承和从类 B 继承,则不能这样做NSManagedObject

  2. 在所有类共享的基类上创建一个类别。例如,NSObject是(实际上)每个其他类的基类。您可以创建一个类别NSObject以添加所有类继承的方法。如果你这样做,你应该在你的方法名称前加上前缀,以确保它们不会与其他名称冲突。例如使用ronin_fooandronin_bar而不是fooand bar

  3. 创建一个包含方法实现的文件,而不是@implementation被块包围。然后#include这个文件在@implementation每个需要方法的类的块中间。请注意,编译器将为每个类生成机器代码的副本,因此这可能会使您的程序变得更大。

  4. 在运行时,使用 Objective-C 运行时 API 将方法从一个类复制到另一个类。您需要阅读Objective-C 运行时编程指南Objective-C 运行时参考的部分内容。您可能还需要搜索一些示例。

于 2013-03-12T23:11:52.787 回答