首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

oc 协议 替什么是id类型

2014-01-15 
oc 协议 为什么是id类型?恩,我是从java转到oc的,我知道oc这边协议其实就是java那边的接口但我困惑的一点是

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;

热点排行