@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 *'
获得此功能的正确方法是什么?
答案 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;