我和你一样是JAVA转过来的,
id<xxxDelegate> 类似于在JAVA中表示这是一个实现xxxDelegate接口的对象,所以你应该明白了,在OC里协议不同于JAVA里的接口它没有类实现。
-(void) xxx:(NSDictionary *)paramDic resultDelegate:(id<xxxDelegate>)resultDelegate;
这样的做法多少有点过时了,建议你用GCD

解决方案 »

  1.   


    你的意思是说oc中没法像java那样写成resultDelegate:(xxxDelegate) 这样?这样写会编译错误,只能写成
    resultDelegate:(id<xxxDelegate>) 这样是么
    没有类实现什么意思,如果我有个类实现了那个协议算不算类实现呢?还是我理解错了?
      

  2.   

    是的,如果你写了一个实现xxxDelegate的nsobject(比如名字叫myObj)的话,你就可以这样写你的方法了:
    -(void) xxx:(NSDictionary *)paramDic resultDelegate:(myObj)resultDelegate;
    也就是说专门写了一个类来做回调的反应,说实话至少我很少会这样写。。还是建议你用GCD吧,这个才真的在使用上像JAVA的接口
      

  3.   

    应该是
    -(void) xxx:(NSDictionary *)paramDic resultDelegate:(myObj *)resultDelegate;
      

  4.   

    而且我的说法不准确,不是GCD,是BLOCK
      

  5.   

    首先要明白objC中的id类型,id在objC中代表任意类型。明白这一点,再说一下为什么使用id<xxxDelegate>来定义。
    你定义的协议,可能有不同的类去实现。而这些类的类型不能被确定,不能在编译时告知编译器实现协议的类的类型。故而使用id类型这种可以代表任意类型的类型来定义。还有就是:协议不能作为类型来出现,所以也就不会出现这样的定义
    -(void) xxx:(NSDictionary *)paramDic resultDelegate:(xxxDelegate)resultDelegate;
      

  6.   

    恩, 我正考虑把它修改成支持block的呢