0

現在のプロジェクトでは、いくつかのプロトコルがあり、このプロトコルを実装するクラスでカテゴリを宣言します。

@interface MyClass (ImplementingMyProtocol) <MyProtocol>

@end


@implementation

// Implementation of protocol

@end

このスキームがどのように解釈されるかについては、次の 2 つの可能性があると思います。

  1. MyClassこのカテゴリは、 に準拠するサブクラスにのみ適用されMyProtocolます。
  2. カテゴリは のすべてのインスタンスに適用され、カテゴリ別MyClassに実装MyProtocolする効果があります。

これら2つの可能性のうち、実際に当てはまるのはどれですか? コンパイラがこの宣言をどのように解釈するのかわかりません。また、そのトピックに関するヘルプやドキュメントも見つかりませんでした。これら 2 つのオプションの両方を処理する方法はわかっていると思いますが、そのためには、実際にコンパイラがコードを解釈する方法がどちらであるかを知る必要があります。

4

1 に答える 1

1

上記の効果は、クラスMyClassが指定されたプロトコルMyProtocolを実装することを意図しており、実行時にもそれに準拠することがxcodeに通知されることです。


プロトコルは「metainfo」のみです。ランタイムに必要なものは何もありません。ランタイムは、このクラスを持っていることだけを知っているので、このクラスを呼び出す必要があります。

一部のプロトコルへの適合性をチェックしません


プロトコルはIDEによるタイプチェック(警告を出すことができます)のためだけにあり、実行時にクラスに尋ねることができますが、objCはしません


したがって、実行に必要なものはまったくありません:D

于 2012-12-18T14:11:55.133 に答える