iphone - 简单协议(protocol)示例的 ARC 语义问题?

标签 iphone objective-c xcode cocoa-touch

我刚刚通过快速测试尝试了一些东西,我有一个问题,在下面的代码中:

@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/

相关文章:

swift - 静默主线程检查器以执行特定操作

objective-c - 在 iOS 中显示带有斜体字母和上标指数的公式

ios - 将通用应用程序切换为 iPhone 专用应用程序

iphone - @synthesize 干扰继承

ios - 相册中所有视频的 NSURL

c++ - C++ 类是否管理 Objective-C 类的生命?

objective-c - 使用 objective-c 计算xml中的元素

objective-c - 以编程方式重新使用 IBOutlet

objective-c - cocoa:webView里面有超链接添加 ` target = "_blank "`打不开

ios - 在 iOS 中是否可以使用没有访问 token 的用户 ID 来获取用户的好友列表?