2

通常、開発者がプロ​​トコルを実装するクラスのインスタンスへのポインターを作成するとき、彼女はこれを行います。

id<ProtocolName> myInstance = [[SomeClass alloc] init];

インスタンスのクラス タイプをより具体的に指定して、このように使用してもよろしいですか?

SomeClass<ProtocolName> *myInstance = [[SomeClass alloc] init];

または方法で:

- (SomeClass<ProtocolName> *)someMethodWithArg:(int)arg;

実装あり (SomeSuperClass が SomeClass のスーパークラスであると仮定):

- (SomeClass<ProtocolName> *)someMethodWithArg:(int)arg
{
   SomeClass<ProtocolName> *instance = [[SomeSuperClass alloc] init];

   return instance;
}
4

1 に答える 1

3

はい、大丈夫です。SomeClass(最後の例では、使用すべき場所を使用していると思いますSomeSuperClassが、意味は理解しています。)

実際、そうする必要がある場合もあります。たとえば、 (プロトコルに明示的に準拠しない限り、 an では使用できません) でautoreleaseorreleaseを使用するには、次を使用する必要があります。NSObjectid<ProtocolName>ProtocolNameNSObject

NSObject<ProtocolName> *protoObj = [....];
[....]
[protoObj autorelease];
于 2012-09-27T15:35:34.817 に答える