Objective-C:带有协议(protocol)的实例指针

标签 objective-c cocoa pointers protocols cocoa-design-patterns

通常,当开发人员创建一个指向实现协议(protocol)的类实例的指针时,她会这样做:

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

可以更具体地了解实例的类类型并像这样使用它吗?

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

或者在方法中:

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

实现(假设 SomeSuperClass 是 SomeClass 的父类(super class)):

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

   return instance;
}

最佳答案

是的,没问题。 (虽然我认为你的最后一个例子使用 SomeClass ,它应该使用 SomeSuperClass ,但我明白你的意思。)

事实上,有时您需要这样做。例如,使用autoreleasereleaseNSObject上(这不适用于 id<ProtocolName> (除非 ProtocolName 明确符合 NSObject 协议(protocol))),您必须使用:

NSObject<ProtocolName> *protoObj = [....];
[....]
[protoObj autorelease];

关于Objective-C:带有协议(protocol)的实例指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624916/

相关文章:

ios - : clang: error: no such file or directory: 的 Travis-CI 错误

c++ - 在决定游戏中对象的生命时,何时使用指针、引用、原始指针和智能指针?

c - 返回指向字符串的指针数组

macos - 如何禁用窗口恢复?

swift - NSViewController 委托(delegate)?

标题栏中的 cocoa 图标

c++ - 不理解编译器的行为

iphone - 同一应用程序不同目标的替代字符串 - 使用 NSLocalizedString?

ios - 如何在 View 之间保持类活力?

ios - 仅实例化一个时, View Controller 中会显示两个 UISearchBar