当使用协议不在objective-c中的委托时?

时间:2015-08-17 06:45:39

标签: ios objective-c

协议是方法声明的列表,任何符合它的人必须或可以实现它。

在大多数情况下,代理人的实施依赖于协议,例如:

@protocol VSActivateCouponDelegate <NSObject>
-(void)activateCouponSuccessWithActivateType:(ActivateType)type;
@end

我的问题是协议的使用场景,除了实现Delegate?

3 个答案:

答案 0 :(得分:1)

例如,您希望保持通用的任何接口,不知道将在某种关系中提供特定角色的确切类。委托就是其中的一个例子,但两个类之间的任何关系都可以使用相同的抽象方法。

答案 1 :(得分:1)

查看NSCopyingNSCoding等。这些也是协议,但它们不会用作代理。

让我们看一下NSCopying。如果一个类符合NSCopying,你知道你可以在它的任何实例上调用copy(并且......复制它),甚至不用查看特定的类,你甚至可以将实例作为id<NSCopying> - 这会使事情更加分离。例如,NSDictionary仅接受id<NSCopying>的键值。

总而言之,协议允许您在不将其耦合到特定类的情况下声明行为。它并不总是必须是代表。

答案 2 :(得分:0)

一个例子是:

假设你有一个任意类型的任意对象数组。现在你想要确保所有对象至少都有一个你可以调用它们的某个函数让它们做某事,然后你可以使所有这些对象符合具有该方法的协议,从而确保所有该数组中的对象具有某种功能。

可能看起来像什么的伪代码:

@protocol MyProtocol {
   - (void) doSomething;
}

//used somewhere
for(MyProtocol object in arrayOfUnknownObjects)
  [object doSomething]; //dont know what object's type is but we know it has [doSomething] method