0

我在 @protocol 中使用 Object 方法,但协议只支持方法声明,有人可以帮助我如何将它与同一方法的方法定义连接起来。(在哪里编写方法定义)。

4

2 回答 2

1

协议只是没有任何实现的方法声明列表。它们可用于将一组可能的(类)限制为实现特定协议的那些。

例如,如果您有一个GasStation类,您可能想要限制可以在车站加油的对象的类型(类)。当然,您可以简单地要求对象是 class 的后代Vehicle,如下所示:

@interface GasStation : NSObject
- (void)refuel:(Vehicle *)vehicle;
@end

@implementation GasStation 
- (void)refuel:(Vehicle *)vehicle {
    [vehicle addFuel:100];
}
@end

但这不允许例如装满油桶。然而,允许传递任何类型的对象也是一个坏主意,因为如果你传递了一个实例,那么在尝试向它发送消息Cat时肯定会出错。addFuel:

因此,您可以定义一个可加油类必须实现的协议:

@protocol RefuelableThing
@required
- (void)addFuel:(float)fuel;
@end

现在您可以使用该协议来限制可以加油的对象类型:

@interface GasStation : NSObject
- (void)refuel:(NSObject<RefuelableThing> *)thing;
@end

AVehicle当然会有一个方法addFuel:,因此可以JerryCan实现自己的单独版本,即使它不是Vehicle.

于 2012-10-02T15:22:42.953 回答
0

一旦你声明了协议,任何符合它的类都可以实现该协议中的方法。只需导入声明协议的标头,将协议添加到该类的接口并在 .m 中实现该方法,阅读该主题是一个很好的建议,顺便说一句

于 2012-10-02T15:17:22.313 回答