передача указателя на объект в качестве указателя протокола - PullRequest
8 голосов
/ 07 февраля 2012
@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];

У меня ошибка компилятора: "Неявное преобразование указателя Objective C в '__autoreleasing id *' запрещено с помощью ARC

Как правильно получить эту функцию?

Ответы [ 3 ]

14 голосов
/ 07 февраля 2012

id уже является указателем, используйте id<Protocol> вместо id<Protocol>*.

4 голосов
/ 07 февраля 2012

id - уже указатель, drop *:

-(void) foo: (id <protoA>) par
2 голосов
/ 07 февраля 2012

Если вы хотите указать тип и протокол, вы можете использовать эту форму:

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

Если вам нужен непрозрачный тип объекта (id) и протокол, используйте эту форму:

- (void)method:(id<MONProtocol>)param;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...