質問
Objective-Cで使用するときにプライベートクラスを非表示にするにはどうすればよいですか?
たとえば、以下に示すよう
PrivateFilter
に、非表示にしたいクラスです。
CustomFilter
私が作った、オープンなクラスです。
GPUImageFilter
も公開されている Github で公開されているクラスです。CustomFilter
の機能を実際にラップしますPrivateFilter
。
@interface CustomFilter : GPUImageFilter
@end
@interface PrivateFilter : GPUImageFilter
@end
可能な解決策
したがって、2 つの解決策があります。
解決策 1: クラス クラスタ
Apple ドキュメントの例を見てA Composite Object: An Example
ください。手順に従って、次のコードを作成しました。
// CustomFilter.h
@interface CustomFilter : GPUImageFilter
@end
// CustomFilter.m
@interface CustomFilter()
@property (nonatomic, strong) PrivateFilter *privateFilter;
@end
@implementation CustomFilter
- (instancetype)init
{
self = [super init];
if (self) {
_privateFilter = [[PrivateFilter alloc] init];
}
return self;
}
// and then override the most of GPUImageFilter functions...
@end
しかし、なぜかうまくいかないので、解決策 2 を試します。
解決策 2: PrivateFilter で初期化する
// CustomFilter.h
@interface CustomFilter : GPUImageFilter
@end
// CustomFilter.m
@implementation CustomFilter
- (CustomFilter *)init
{
self = (CustomFilter *)[[PrivateFilter alloc] init];
return self;
}
@end
これは機能しますが、で使用するのは非常に奇妙alloc
ですinit
。だから私は解決策3を試します。
解決策 3: ファクトリ クラス メソッド
// CustomFilter.h
@interface CustomFilter : GPUImageFilter
+ (CustomFilter *)filter;
@end
// CustomFilter.m
@implementation CustomFilter
+ (CustomFilter *)filter
{
CustomFilter *filter = (CustomFilter *)[[PrivateFilter alloc] init];
return filter;
}
@end
これは機能しますが、クラス クラスターと同様に継承できませんでした。
質問を繰り返す
最善の解決策はどれですか?または、他に良い解決策はありますか?