@protocol Eating
@end
@interface Eat : NSObject<Eating>
{
}
- (id<Eating> *)me;
@end
@implementation Eat
- (id<Eating> *)me { return self; }
@end
在上述 Objective-C 代码中,为什么 "return self" 会导致“返回不兼容指针类型”警告?什么是不兼容的指针类型,如何修复它?
@protocol Eating
@end
@interface Eat : NSObject<Eating>
{
}
- (id<Eating> *)me;
@end
@implementation Eat
- (id<Eating> *)me { return self; }
@end
在上述 Objective-C 代码中,为什么 "return self" 会导致“返回不兼容指针类型”警告?什么是不兼容的指针类型,如何修复它?
因为id
本身就是一个指针,所以你不需要星号。
@interface Eat : NSObject<Eating> {
}
- (id<Eating>)me;
@end
删除id*并用id替换。 id已经是一个指针。
id
本质上是NSObject *
(尽管有一些细微的差别)。因此,当你返回self
时,你实际上是返回了-(NSObject *)
。你所拥有的是id *
,它就像NSObject **
。id
是 struct objc_object*
的一种类型定义,而不是 NSObject *
。两者之间的区别非常显著。 - dreamlax- (id<Eating>)me { return self; }
(因为你返回的是id,而不是对象的指针)。