我有一个协议P
@protocol P<NSObject>
{
-(void)foo;
@optional
-(void)bar;
}
我有很多课程(比方说一打)。所有这些类都实现了协议P.其中大约一半实现了方法 bar ,并且所有bar实现完全相同。
分享栏的实施的最佳方法是什么?
明显的想法:
1)创建一些实现方法栏的基类,让其他类继承它。
实施起来很简单。但是,我不是这个想法的忠实粉丝。我更喜欢类层次结构来表示实体泛化/规范而不是代码重用。
2)创建一个帮助器并从需要实现bar方法的所有类中调用它
确定。有用。但是,如果bar的实现很小(在我的情况下是几行),那么我们将比代码本身有更多的开销(辅助类并从每个类调用它)。
还有其他(更好)的方法吗?
答案 0 :(得分:4)
以下是在类之间共享方法实现的几种方法:
继承。您可以使所有类继承自实现共享方法的公共基类。但是,如果您需要A类继承UIViewController
而B类继承自NSManagedObject
,则不能这样做。
在所有类共享的基类上创建一个类别。例如,NSObject
是(几乎)每个其他类的基类。您可以在NSObject
上创建一个类别,以添加所有类继承的方法。如果这样做,您应该为方法名称添加前缀,以确保它们不会与其他名称冲突。例如。使用ronin_foo
和ronin_bar
代替foo
和bar
。
创建一个文件,其中包含由@implementation
块包围的方法实现非。然后#include
此文件位于需要这些方法的每个类的@implementation
块的中间。请注意,编译器将为每个类生成机器代码的副本,这样可以使您的程序更大。
在运行时,使用Objective-C运行时API将方法从一个类复制到另一个类。您需要阅读Objective-C Runtime Programming Guide以及Objective-C Runtime Reference的部分内容。你可能还需要谷歌一些例子。