当前位置: 代码迷 >> Iphone >> oc 协议 替什么是id类型
  详细解决方案

oc 协议 替什么是id类型

热度:376   发布时间:2016-04-25 05:52:59.0
oc 协议 为什么是id类型?
恩,我是从java转到oc的,我知道oc这边协议其实就是java那边的接口
但我困惑的一点是,我写一个方法,需要一个参数,这个参数是协议类型为什么需要id类型,而不是协议类型那个?
例如下面这样

-(void) xxx:(NSDictionary *)paramDic resultDelegate:(id<xxxDelegate>)resultDelegate;
//id<xxxDelegate> 这个是我需要的协议

//但如果按照java那边的写法应该是没有id的啊
-(void) xxx:(NSDictionary *)paramDic resultDelegate:(xxxDelegate)resultDelegate;

很好奇为什么不直接用xxxDelegate 而是要用 id<xxxDelegate> 这样?

------解决方案--------------------
而且我的说法不准确,不是GCD,是BLOCK
------解决方案--------------------
首先要明白objC中的id类型,id在objC中代表任意类型。明白这一点,再说一下为什么使用id<xxxDelegate>来定义。
你定义的协议,可能有不同的类去实现。而这些类的类型不能被确定,不能在编译时告知编译器实现协议的类的类型。故而使用id类型这种可以代表任意类型的类型来定义。

还有就是:协议不能作为类型来出现,所以也就不会出现这样的定义
-(void) xxx:(NSDictionary *)paramDic resultDelegate:(xxxDelegate)resultDelegate;
  相关解决方案