我正在尝试重写Objective-C中的Java库。我想重写它作为一个API,因此需要实施某些方法。我已经开始尝试重写代码,但我遇到了几个问题。什么是移植/重写这个库的正确方法?
Objective-C是否支持抽象类?
如果不是,我应该写协议,还是只使用我自己的类?我知道你可以标记所需的方法。
如果我写协议,如果我将所有协议分组到一个头文件中,还是最好不要做?
如果我使用我自己的类,是否有一种方法来要求抽象方法的子类化?
我正在尝试重写Objective-C中的Java库。我想重写它作为一个API,因此需要实施某些方法。我已经开始尝试重写代码,但我遇到了几个问题。什么是移植/重写这个库的正确方法?
Objective-C是否支持抽象类?
如果不是,我应该写协议,还是只使用我自己的类?我知道你可以标记所需的方法。
如果我写协议,如果我将所有协议分组到一个头文件中,还是最好不要做?
如果我使用我自己的类,是否有一种方法来要求抽象方法的子类化?
Objective-C中有编译器强制的抽象类,协议是你所追求的。
我会亲自将协议分解为多个头文件以便易读。
没有内建的创建抽象类的支持,但可以通过覆盖allocWithZone:
方法来实现。
+ (id)allocWithZone:(NSZone *)zone {
if([self class] == [MyAbstractClass class]) { // Check if it is a subclass or not
NSLog(@"MyAbstractClass is an abstract superclass and should not be allocated directly. Use a concrete subclass instead.");
return nil;
}
return [super allocWithZone:zone];
}
+1令人惊讶的整洁把戏 – bioffe 2011-03-22 19:51:34
协议是否也可以实现属性,还是抽象类别的东西?是的,我如何将课堂标记为抽象? – Moshe 2011-03-22 17:05:07
@property只是setPropertyName和propertyName消息的语法快捷方式。你的协议,如果你想,可能需要setPropertyName消息....如果我正确理解你的问题。 – 2011-03-22 17:31:22
我想知道是否可以在协议中定义一堆必需的属性。 – Moshe 2011-03-22 18:52:04