Objective-C Protocol Madness - 如何根据协议返回对象?

时间:2009-09-06 21:40:23

标签: iphone objective-c protocols

@protocol Eating
@end

@interface Eat : NSObject<Eating>
{
}
- (id<Eating> *)me;
@end

@implementation Eat
- (id<Eating> *)me { return self; }
@end

在上面的Objective-C代码中,为什么“返回self”导致“从不兼容的指针类型返回”警告?什么是不兼容的指针类型以及如何解决它?

5 个答案:

答案 0 :(得分:13)

因为id本身就是一个指针,所以你不需要星号。

@interface Eat : NSObject<Eating> {
}
- (id<Eating>)me;
@end

答案 1 :(得分:2)

好的..答案是“id”而不是“id *”。

答案 2 :(得分:1)

因为id基本上是NSObject *(尽管存在一些细微差别)。因此,当您返回self时,您将返回-(NSObject *)。你所拥有的是id *,就像NSObject **

答案 3 :(得分:0)

删除id *并替换为id。 id已经是一个指针。

答案 4 :(得分:0)

你的使用稍微偏离 - 它是:

- (id<Eating>)me { return self; }

(因为你要返回id,而不是指向对象的指针)。