iPhone SDK中的协议

时间:2010-03-02 03:49:00

标签: iphone protocols

我对@protocol ---- @ end in iphone感到困惑,实际上是什么意思。我们为什么要使用它。它是一种为类提供附加方法的功能吗?我不确定。

请帮帮我。

谢谢,

世斌

4 个答案:

答案 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)]) {
   ...
}

检查委托是否实际符合指定的协议。