2011-03-22 109 views
1

我正在尝试重写Objective-C中的Java库。我想重写它作为一个API,因此需要实施某些方法。我已经开始尝试重写代码,但我遇到了几个问题。什么是移植/重写这个库的正确方法?

  • Objective-C是否支持抽象类?

  • 如果不是,我应该写协议,还是只使用我自己的类?我知道你可以标记所需的方法。

  • 如果我写协议,如果我将所有协议分组到一个头文件中,还是最好不要做?

  • 如果我使用我自己的类,是否有一种方法来要求抽象方法的子类化?

回答

2

Objective-C中有编译器强制的抽象类,协议是你所追求的。

我会亲自将协议分解为多个头文件以便易读。

+0

协议是否也可以实现属性,还是抽象类别的东西?是的,我如何将课堂标记为抽象? – Moshe 2011-03-22 17:05:07

+0

@property只是setPropertyName和propertyName消息的语法快捷方式。你的协议,如果你想,可能需要setPropertyName消息....如果我正确理解你的问题。 – 2011-03-22 17:31:22

+0

我想知道是否可以在协议中定义一堆必需的属性。 – Moshe 2011-03-22 18:52:04

1

没有内建的创建抽象类的支持,但可以通过覆盖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]; 
} 
+0

+1令人惊讶的整洁把戏 – bioffe 2011-03-22 19:51:34