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 上使用autoreleaseor (这release对 anNSObject不可用id<ProtocolName>(除非ProtocolName明确符合NSObject协议)),您必须使用:

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