我在 @protocol 中使用 Object 方法,但协议只支持方法声明,有人可以帮助我如何将它与同一方法的方法定义连接起来。(在哪里编写方法定义)。
问问题
94 次
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 回答