2015-04-05 106 views
1

我在这里发现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

这是执行HTTPResponse协议的NSObject。所以你可以调用任何返回值的HTTPResponse方法。

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

0

这意味着

一个实现类HTTPResponse协议

所以你很接近

NSObject的指针。它可能是NSObject *,但是你会失去很多编译器可以使用的信息,并且需要进行大量的投射来弥补这一点。

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