需要澄清此退货类型

时间:2015-04-05 21:43:20

标签: objective-c

我在这里发帖this,我不确定代码的有效性。 但是我从来没有遇到过这样的事情或者读过这个(我刚开始做ObjectiveC)。这是代码示例

@implementation MyHTTPConnection

    - (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path
    {
    HTTPLogTrace();

    if ([path isEqualToString:@"/getElement"])
    {
            NSData *data = ...
            HTTPDataResponse *response = [[HTTPDataResponse alloc] initWithData:data];
            return response;
    }

        // default behavior for all other paths  
    return [super httpResponseForMethod:method URI:path];
    }

@end

我的问题是这里的返回类型是什么?

(NSObject<HTTPResponse> *)

它在我看来是一个实现HTTPResponse对象的NSObject指针。 我认为它可以简单地写成这样的

NSObject *

我错过了什么吗?我不确定为什么选择上述内容。特别是与NSObject。任何建议,对此的澄清将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是实现NSObject协议的HTTPResponse。因此,您可以在返回的值上调用任何HTTPResponse方法。

如果HTTPResponse继承自NSObject协议(与NSObject类不同),那么通常的表达方式是id<HTTPResponse>。但是NSObject<HTTPResponse> *并没有错。

答案 1 :(得分:0)

这意味着

  

实现HTTPResponse协议的NSObject指针

所以你很亲密。它可能是NSObject *,但是您丢失了编译器可以使用的大量信息,并且您需要进行大量的投射来弥补这一点。

在许多方面,最好使用id < HTTPResponse >并确保HTTPResponse协议扩展NSObject协议,因为这为编译器提供了所需的保证,但也给出了底层对象类型的更大灵活性(例如使用NSProxy)。