objective-c - Objective C 协议(protocol)的使用

标签 objective-c ios protocols typechecking

我有一个家庭作业问题让我非常困惑。下面是一个问题的简要解释。

Imagine you are developing an application that stores contact information. The address book may contain many entity types e.g. Human being, a company or anything else that has a contact information.

  • Now instead of explicitly checking every object type write a protocol that declares how an object must behave and successfully appear in your address book.

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

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

  2. 我的第二个想法是在 java 中使用类似 abstract class 的东西。这意味着从抽象类继承的类实现了自己的抽象方法。作为一个天真的 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

最佳答案

协议(protocol)与 Java 接口(interface)是一回事。它只是定义类应该支持哪些方法。这是一个清楚解释它的页面:http://www.otierney.net/objective-c.html#protocols

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

@protocol ContactProtocol
-(void) phoneNumber;
@end

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

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

然后在编译时(或在 xcode 4 上运行)它会告诉您是否忘记将 phoneNumber 方法添加到 PersonCompany 类。

关于objective-c - Objective C 协议(protocol)的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617615/

相关文章:

iphone - dealloc 从哪里开始?

iphone - YouTube API 广告支持 Objective-C?

c - 奇怪的 Linux 套接字协议(protocol)行为

swift - 如果 Self 是 swift 中的两个(或更多)类之一,是否允许使用协议(protocol)?

Swift Struct 不符合协议(protocol) Equatable?

iphone - applicationWillTerminate 在崩溃时被调用

iphone - 添加本地化时,Appstore 提示名称已存在?

objective-c - 如何从devicename(UITableViewCell)中的tableview中显示蓝牙支持的服务?

ios - 如何在 Swift 中将日期选择器添加到 UIAlertController(UIAlertView)?

iphone - 将我的应用程序迁移到 iphone5 分辨率时出现问题