2011-07-06 8 views
5

カテゴリからプロトコルを採用:私はMyClass.h公共ヘッダ、残りの静的ライブラリを作成しました私はこの修正プログラムが実際に動作することを確認したかったし、自分のコードに悪影響はありません

を私のコードのすべてが隠されています。 MyClassは、MyProtocol.hで定義されているMyProtocolプロトコルを採用しています。 MyProtocol.hを非表示にしておきたいのですが、MyClass.hはパブリックヘッダーなので、プロジェクトヘッダーとして隠しておくと、MyProtocol.hが見つかりません。私の解決策:

MyClass.h:

@interface MyClass : NSObject { 
    //instance variables 
} 
// methods 
@end 

がMyClass.m:Can a category simultaneously implement a protocol?、および:

#import "MyProtocol.h" 
@interface MyClass() <MyProtocol> 
@end 

@implementation MyClass 
// implementation 
@end 

私はここ以外で行われているこの種のものの他の例を見ていません問題/答えが元の質問と無関係になってしまった。 だから私はこれが実際にそれがそうであるように見えることを確かめたい、あるいは私がしようとしていることを達成するためのより良い方法があるかどうかを確かめたいと思っていました。

+3

クラスをプロトコルに準拠させるためにカテゴリを使用することは合法です。 –

答えて

6

あなたが提案していることは完全に正当なものであり、問​​題を解決するうえで最適です。

この件に関するGoogleの検索結果を混乱させる可能性がある微妙な意味の違いがあります。あなたの例で空の括弧を使うことによって、あなたは技術的に "クラス拡張"ではなく、 "カテゴリ"であると宣言しました。微妙な相違点は、コンパイラではクラス拡張の中で宣言されたメソッドをクラスのメインの実装ブロックに実装する必要があるということです。対照的に、名前付きカテゴリ内で宣言されたメソッドは、独立した.mファイル内にある独立した名前付きの実装ブロック内に実装されます。

関連する問題