2012-02-07 39 views
8
@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 

trong một số phương pháp lớp khác tôi sử dụng nó theo cách này:đi qua con trỏ đối tượng như con trỏ giao thức

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

[obj1 foo: obj2]; 

Tôi có lỗi biên dịch: "chuyển đổi ngầm của một con trỏ Objective-C để '__autoreleasing id *' là không được phép với ARC

cách thích hợp để làm được chức năng này là gì?

Trả lời

13

id đã là một con trỏ kiểu, sử dụng chỉ id<Protocol> thay o f id<Protocol>*.

+0

đó là nó. Cảm ơn bạn – gossamer

+0

R'SNG NÓ! Giải pháp này giúp tôi giải quyết vấn đề đau đầu XD –

4

id là một con trỏ đã có, thả *:

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

Nếu bạn muốn xác định loại và giao thức, bạn có thể sử dụng hình thức này:

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

Nếu bạn muốn một loại objc đục (id) và giao thức, sử dụng biểu mẫu này:

- (void)method:(id<MONProtocol>)param; 
Các vấn đề liên quan