[英]Subclassing private classes in a library
因此,我們有一個帶有以下頭文件的庫(例如):
上市
私人的
但是,當將其導入到應用程序時,它會抱怨找不到MyClass.h
。 這很公平。 它的#import
導入MyCustomClass.h
,但尚未隱藏。
所以我將其更改為前向類聲明@class MyClass
。 現在它抱怨我不能對超類使用前向聲明(也很有意義)。
那我該如何解決呢? 我需要對某些子類進行子類化,但是我只希望使用該庫的人可以訪問子類,而不是父類。
您正在編寫一個庫,並且希望客戶端實例化從MyClass繼承的MyCustomClass。 但是客戶端永遠不要實例化MyClass。
方法1 :您實際上不需要或不想隱藏MyClass。 您只想避免實例化它的實例。
工廠可能是MyClass的一部分,也可能在其他地方。
@implemenation MyClass
+ (MyCustomClass*) createWith: (Param*) someData;
方法2 :考慮組成而不是繼承。 讓MyCustomClass 擁有類型為MyClass的對象,並使其完成所有工作:
@implementation MyCustomClass
@property (nonatomic,strong) MyClass* myClassInstance;
- (void) doSomething
{
[self.myClassInstance doSomething];
}
由於客戶無論如何都不能繼承MyClass的子類,因此繼承是一個實現細節。 不需要時不要繼承。
方法3 :您確定要公開MyCustomClass嗎? 它真的是對象還是協議? 也許您的庫應該公開提供該接口,而MyClass和MyCustomClass都是私有實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.