传递对象指针作为协议指针

时间:2012-02-07 10:38:59

标签: objective-c

@protocol protoA <NSObject>
@end

@interface objA : NSObject<protoA> {
    @private
    }
@end

@implementation objA
@end

@protocol protoB <NSObject>
    -(void) foo: (id <protoA> *) par;
@end

@interface objB : NSObject<protoB> 
    -(void) foo: (id <protoA> *) par;
@end

@implementation objB
    -(void) foo: (id <protoA> *) par
    {
    //...
    }
@end

在其他一些类方法中我用这种方式:

objB *obj1 = [[objB alloc] init];
objA *obj2 = [[objA alloc] init];

[obj1 foo: obj2];

我有编译器错误:“ARC不允许将Objective-C指针隐式转换为'__autoreleasing id *'

获得此功能的正确方法是什么?

3 个答案:

答案 0 :(得分:14)

id已经是指针类型,只使用id<Protocol>代替id<Protocol>*

答案 1 :(得分:4)

id已经是指针,删除*

-(void) foo: (id <protoA>) par

答案 2 :(得分:2)

如果要指定类型和协议,可以使用以下格式:

- (void)method:(MONType<MONProtocol>*)param;

如果您想要一个不透明的objc类型(id)和协议,请使用以下表单:

- (void)method:(id<MONProtocol>)param;