2011-03-22 169 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

相關問題