我对@protocol ---- @ end in iphone感到困惑,实际上是什么意思。我们为什么要使用它。它是一种为类提供附加方法的功能吗?我不确定。
请帮帮我。
谢谢,
世斌
答案 0 :(得分:9)
协议用于声明将被许多对象或类使用的功能。
考虑一个例子,您正在开发一个鸟类数据库。所以你将把这只鸟作为基础类,你将继承这只鸟来创造你自己的鸟。因此在鸟类中你不会有任何定义,但是所有鸟类都必须继承的行为。就像鸟儿可以飞翔一样,有这样的翅膀。那么你将会宣布所有这些行为并在派生类中实现它们。因为可能有高空飞行和长距离飞行的鸟类,有些会飞得很短。
为了达到这个目的,使用了@protocol。使用@protocol,您可以声明一些行为。并在其他类中使用这些行为来实现行为。
这样可以避免一次又一次地声明相同方法的开销,并确保在类中实现该行为。
答案 1 :(得分:6)
@protocol相当于Java中的接口。
@protocol Printable // Printable interface
- (void) print;
@end
@interface MyClass: NSObject <Printable> { ... }
// MyClass extends NSObject implements Printable
答案 2 :(得分:5)
@protocol可用于定义委托。
例如:
@protocol SomeDelegate
- (void)delegateActionCompleted;
@end
@interface MyClass: NSObject {
id<SomeDelegate> _delegate;
}
@end
然后是实现(.m)文件:
@implementation MyClass
- (void)performAction {
// do the actual work
if (self._delegate && [self._delegate respondsToSelector:@selector(delegateActionCompleted)]) {
[self._delegate delegateACtionCompleted];
}
}
@end
答案 3 :(得分:0)
最好使用
之类的东西if (self.delegate && [self.delegate conformsToProtocol:@protocol(YourProtocolName)]) {
...
}
检查委托是否实际符合指定的协议。