我正在嘗試重寫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