Objective C协议用法

Tea*_*App 15 protocols objective-c typechecking ios

我有一个困扰我的功课问题,非常糟糕.以下是对问题的简要说明.

想象一下,您正在开发一个存储联系信息的应用程序.地址簿可以包含许多实体类型,例如人类,公司或具有联系信息的任何其他实体.

  • 现在,不是显式检查每个对象类型,而是编写一个协议,声明对象必须如何表现并成功出现在地址簿中.

我回答这个问题的理解和努力是,

  1. 构建一个协议,该协议在@required标签下具有每种类型的联系信息的通用方法.在@optional下,所有其他方法在不同的联系方式(例如传真号码与公司有关,但不是人...)之间不相似.在运行时,您可以使用检查对象是否响应任何给定方法selector. 怀疑:然而这又是间接地明确检查对象类型,我是对的吗?

  2. 我的第二个想法是使用像abstract classjava 这样的东西.这意味着抽象类中的继承类实现了自己的抽象方法.作为一个天真的iOS开发人员,我不知道如何实现这个?我不确定这是否能解决我的问题.如果有人知道,我想得到启发.


到目前为止进行外部阅读,如果我正在寻找的答案是在其中一个链接中,请告诉我.我会再次阅读它以了解并解决这个问题:).谢谢.

  1. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-TPXREF144

  2. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-TPXREF146

  3. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-TPXREF149

Mat*_*son 10

协议与Java接口相同.它只定义了类应该支持的方法.这是一个清楚解释的页面:http://www.otierney.net/objective-c.html#protocols

基本上,如果你想确保一个类有一个phoneNumber方法(phoneNumber属性的访问者),你会做这样的事情:

@protocol ContactProtocol
-(void) phoneNumber;
@end

@interface Person: NSObject <ContactProtocol> {
    ...
}

@interface Company: NSObject <ContactProtocol> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后在编译时(或为xcode 4生效)它将告诉您是否忘记将phoneNumber方法添加到类PersonCompany类.

  • 协议与抽象类不同; 它们类似于Java中的接口.从抽象类派生类时,继承方法及其实现.使用接口,您只能获得声明.Obj-c协议也是如此 - 当您声明一个类实现协议时,您必须提供方法实现. (6认同)