我刚刚通过快速测试尝试了一些东西,我有一个问题,在下面的代码中:
@protocol stuffieProtocol <NSObject>
@required
-(void)favouiteBiscuit;
@end
.
// DOG & TED ARE IDENTICAL, THEY JUST LIKE DIFFERENT BISCUITS
@interface Dog : NSObject <stuffieProtocol>
@property (strong, nonatomic) NSString *name;
@end
@implementation Dog
- (id)init {
return [self initWithName:@"Unknown"];
}
- (id)initWithName:(NSString *)name {
self = [super init];
if(self) {
_name = name;
}
return self;
}
- (void)whoAreYou {
NSLog(@"MY NAME IS: %@ I AM A: %@", [self name], [self class]);
}
- (void)favouiteBiscuit {
NSLog(@"FAVOURITE BISCUIT IS: Costa Jam Biscuit");
}
@end
.
Dog *stuffie_001 = [[Dog alloc] initWithName:@"Dog Armstrong"];
Ted *stuffie_002 = [[Ted alloc] initWithName:@"Teddy Sullivan"];
NSArray *stuffieArray = @[stuffie_001, stuffie_002];
for(id<stuffieProtocol> eachObject in stuffieArray) {
[eachObject whoAreYou]; // << ERROR
[eachObject favouiteBiscuit];
}
我的问题是我收到一个错误 “ARC 语义问题:选择器‘whoAreYou’没有已知的实例方法”
如果我在 [eachObject whoAreYou];
前加上 [(Dog *)eachObject whoAreYou];
那么这适用于循环的所有迭代,但这只是感觉错误,因为数组中的所有对象都不是 Dog
类型。
我应该在前面加上什么才正确?
最佳答案
添加
-(void) whoAreYou;
您的协议(protocol)。然后编译器知道循环中的 eachObject
响应该方法。
关于iphone - 简单协议(protocol)示例的 ARC 语义问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11775989/