技术开发 频道

为C++编程者开发的Objective-C高级篇

  协议

  在Objective-C中,协议是类实现消息的集。你可以具体化指针指向类实现给定的接口。

  id object;

  NSString *string;第一个例子和在Java中声明变量作为接口类型是等价的。在C++中最接近的等价就是使用抽象类取代接口并具体制定抽象类为类型。

  第二个例子更有趣。字符串变量被允许成为任何NSString的子类并实现AnInterface,这允许你限制一种实现特定接口的子类子集的类型。一个通常的例子如下:

  NSObject *delegate;这允许成为任何NSObject的子类(并且你期望从任何对象得到的方法都会实现)并且要求它实现特殊的协议。还有一个可供选择的:

  id delegate;[FS:PAGE]这作用于NSObject,因为随着类采取协议,NSObject既是一个类也是一个协议。NSProxy就是这样做的,和其他一些父类可以被间或的用作NSObject的子类。

  因为Objective-C来自于Smalltalk,随着任何都是对象,这并不是一个惊人的协议,象类也是对象。因此,你可以对他们发送消息来执行内省。典型地来说,这些都不必自己做,而是依赖于消息发给NSObject的子类:

  if ([object conformsToProtocol:@protocol(MyDelegateProtocol)])

  {

  
// Do something with the delegate

  }

 

  有件事稍微对协议造成混淆就是事实上他们通过比较名字被用作相等性测试。如果两个协议同名的话,在运行时,你没法区分哪一个对象实现。论证就是允许直接从源代码文件中所展示的用@protocol()测试性能,而这些源文件不能存取协议描述但能导致混淆。

0
相关文章