我一直在阅读有关 Objective-c 协议(protocol)和类别的文章,但对我来说两者似乎都毫无意义。它们都用于以某种有趣的方式向程序添加内容,而不是仅仅手动添加。
我可能确信协议(protocol)的目的是让您可以检查 ID 的类型,但仅此而已。我认为它们没有其他实际用途。
至于类别,我真的不明白您为什么不直接将它们添加到代码中。为什么您需要在您要实现的类别中手动指定方法,而不是正常执行?您是否想创建一个“子类”但稍作修改?为什么不创建一个子类?
我真的看不出这两个的用途,希望有人能告诉我它们的真正用途=/
提前致谢, 基督徒
最佳答案
类别是将方法添加到源代码对您不可用的类,例如所有 Apple 类(以 NS、CG、CA 等开头的类),而不需要对其进行子类化。
协议(protocol)的目的是定义遵守该协议(protocol)的类必须实现的方法。在 Java 中,这些称为接口(interface)。目的是整理非兄弟类(同一父类(super class)的子类)之间的相似性。假设你有一个类 Chair和一类 Petrol .它们没有太多共同点,除了它们都遵守 flammable。协议(protocol),这要求它们具有某些方法,例如 specificEnergy和 flamingPoint .
现在您的 Fire类可以有一个方法 addFlammableMaterial:(id <flammable>)material .
协议(protocol)通常用于声明某些类的实例可以是某些其他实例的委托(delegate)。您可以声明您的 View Controller 充当 UITableView 的数据源。通过声明它符合 UITableViewDataSource协议(protocol),这意味着您的 viewController 保证它实现了该协议(protocol)所需的方法,并且 tableView 可以安全地休息,因为它可以信任 VC 作为它的数据源。
关于iphone - Objective-c - 类别和协议(protocol)的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394915/
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
嗨,我正在使用rolify,只是意识到我并没有真正利用它的全部潜力。目前,我正在Controller中执行某些操作,如current_user.has_role?:whatever_role重新路由用户,并允许用户担任其他角色……有人问了有关rolify的stackoverflow问题,当我要回答它时,我意识到我做错了。现在,这是我的困惑开始的地方...在capability.rb中,我有:user||=User.new#guestuser(notloggedin)ifuser.has_role?:consumercan:manage,Reviewelsecan:read,Review
是否有chrome开关来抑制“外部协议(protocol)请求”?我正在使用selenium-ruby-watirwebdriver自动化应用程序。我在网上搜索了绕过此窗口和对话的解决方案:http://productforums.google.com/forum/#!topic/chrome/K22hXwRy6zQ概述了我们如何手动执行此操作。但是对于Selenium-Chrome-Ruby,我需要通过可能设置一个chrome开关(chorme开关列表:=http://src.chromium.org/svn/trunk/src/chrome/common/chrome_swit
我知道Rake代表RubyMake,我知道Make是一个unix构建实用程序。现在,我在Xcode工作,将iPhone应用程序构建到Ruby,所以我以前从未使用过Make,我唯一一次使用rake是在rails中或安装一些第三方包时,我输入了像rakedb这样的命令:迁移。我不明白的是……构建实用程序到底是什么?rake的目的是什么?它让我做什么?因此,如果有人能帮我回答这些问题中的任何一个,我将不胜感激。 最佳答案 Rake允许您在每个项目的基础上编写某些任务的脚本,就像Makefile允许Unix开发人员编写他们的编译和构建过程的
我正在为ruby开发一个C扩展,但我需要包含来自IOBluetooth框架的header,特别是:#import#import一切都编译正常,但在运行时,扩展错误:path/to/file.rb:1:in`require_relative':dlopen(/path/to/extension.bundle,9):Symbolnotfound:_OBJC_CLASS_$_IOBluetoothDeviceInquiry(LoadError)我相当确定这与未包含在链接过程中的框架有关,但我不确定原因。任何帮助将不胜感激extconf.rb:#Loadsmkmfwhichisusedto
我正在使用Rails创建一个新产品,并想为每个产品添加一个类别。我有三个表:产品、类别和分类(存储产品和类别之间的关系)。我正在尝试使用嵌套属性来管理分类的创建,但不确定应如何更新我的Controller和View/表单,以便新产品也更新分类表。这是我的模型:classProduct:categorizationshas_attached_file:photoaccepts_nested_attributes_for:categorizations,allow_destroy:trueattr_accessible:description,:name,:price,:photovali
我有一个Markdown文件如下:---title:MyPagecategories:-first-second---在我的_config.yml文件中,我将永久链接设置为/:categories/:title.html因此,当我生成站点时,永久链接最终变为/first/second/title.html,而我希望Jekyll会创建/first/title.html和/second/title.html有没有办法在没有自定义插件的情况下做到这一点?干杯 最佳答案 最简单也是对我来说最好的方法是通过frontmatter定义永久链接。