@protocol 与类簇

2024-02-29

那些主要是什么pro and contra for @protocol and 类簇 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34Objective-C 中的概念?

两人介绍一下松耦合 http://en.wikipedia.org/wiki/Loose_coupling在程序架构中。它们在概念上几乎相等,还是还有其他值得了解的事情?


警告:不是可可专业人士,但我不相信它们根本是平等的。

With 类簇 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34你子类化了。

类集群是 Foundation 框架广泛使用的一种设计模式。类簇将许多私有具体子类分组到公共抽象超类下。以这种方式对类进行分组简化了面向对象框架的公开可见的体系结构,而不会降低其功能的丰富性。类集群基于“Cocoa 设计模式”中讨论的抽象工厂设计模式。

@protocols http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW46另一方面,它们更像 Java 接口。

Objective-C 的扩展(称为协议)非常类似于 Java 中的接口。两者都只是发布任何类都可以选择实现的接口的方法声明列表。协议中的方法由其他类的实例发送的消息调用。

简而言之,类簇是子类/超类,其中子类符合超类的整个身份,以便可以对用户隐藏实现。这在以下情况中很明显NSArray编译器使用上下文来选择要使用的最佳数据结构类型。你不打电话NSTree or NSLinkedList就像在 Java 中一样。你可以看看如何NSNumber is 在这里实施 http://code.google.com/p/purefoundation/source/browse/trunk/NSNumber.m?r=30,尤其是它说的部分:

// NSNumber 实例方法——永远不会被调用...

@protocols 就像客户端/服务器关系,其中客户端类采用服务器类的协议,因此服务器可以调用客户端上的功能。<NSAppDelegate> and <UIAlertViewDelegate> http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html是使用协议的很好的例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@protocol 与类簇 的相关文章

  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • 所需框架与静态库

    构建现代框架 https developer apple com videos play wwdc2014 416 says 每个应用程序都有自己的自定义框架副本 https stackoverflow com a 15262463 242
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • 添加自定义过渡会导致 xib 加载错误的屏幕尺寸

    我正在尝试向具有 xib 的 UIViewController 添加自定义过渡 我尝试了几种方法 但它们都有相同的问题 视图显示的屏幕尺寸错误 我当前的示例基于以下教程 使用 Swift 在 iOS 中自定义 UIViewControlle
  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • UIScrollView - 启用分页后,我可以“更改”页面宽度吗?

    将滚动视图 将 pagingEnabled 设置为 YES 将页面宽度设置为滚动视图边界以外的其他值的最简单方法是什么 让我举个例子 假设我有一个包含 10 个项目的滚动视图 每个项目的宽度为 150 像素 而我的滚动视图的宽度为 300
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if

随机推荐

  • 创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:对象引用未设置到对象的实例

    我在尝试调试我的表单时收到此错误 我根本看不到错误可能在哪里 也没有突出显示哪里 有人有任何建议吗 创建表单时出错 请参阅 Exception InnerException 细节 错误是 对象 未设置对实例的引用 目的 Dim dateCr
  • KVC 使用哪种方法? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用哪种方式进行键值编码更好 让我们假设我的控制器类有变量我的变量 有人可以写一下意见 哪些是好的 哪些是坏的 以及为什么 1 Method i
  • 是否可以从对象内部将对象设置为空?

    我知道this null是非法的 我想知道是否还有其他方法可以让对象自行清理 我的愿望是能够做这样的事情 A a new A a doStuffAndDisappear if a null this is true after my doS
  • 使用 AngularJS 的 ng-options 进行选择

    我在其他帖子中读到过它 但我无法弄清楚 我有一个数组 scope items ID 000001 Title Chicago ID 000002 Title New York ID 000003 Title Washington 我想将其渲
  • WEB-INF/lib 目录与 Java 9 模块

    Web 应用程序的 WEB Inf lib 目录用于存放 jar 文件 servlet 容器 例如 Tomcat 会自动将其放入应用程序的类路径中 对于 Java 9 的模块化 jars 这种机制如何工作 或将来应该工作 有什么想法吗 它们
  • Xcode Swift MacOS 应用程序,将文件拖放到 NSTextField 中

    我正在为 MacOS 实现我的第一个应用程序 用户应该输入要处理的文件路径 我的 NSViewController 应用程序上有一个 NSTextField 我想让用户只需将一个文件拖放到那里 这样我就可以获得文件路径 打开它并在 NSTe
  • XNA 框架导入器

    我正在使用 XNA 框架开发游戏 我的游戏有几个级别 我将数据存储在纯旧文本文件中 在 VS 2008 中 当我将关卡文件添加到项目并编译时 我收到以下错误消息 错误 1 无法自动检测用于 Levels 0 txt 的导入程序 没有处理此文
  • Automapper 继承——重用映射

    我正在尝试使用自动映射器为父对象创建单个映射 并在其子对象中重用它 对于子属性 我只想映射额外的字段 这可能吗 我的代码看起来像这样 CreateCalculationMap message This does the BASE paren
  • JavaScript 中的 new 运算符如何工作?

    可能是 JavaScript 中最难理解的部分 位于原型链旁边 所以问题是 如何 new dataObj args 实际上创建一个对象 并定义它的原型链 构造函数 等 最好是展示一个替代方案 以充分理解这个关键字 The new操作员使用内
  • HTML5本地存储VS应用程序缓存离线网站浏览

    看了多篇文章后 我仍然不清楚本地存储和应用程序缓存清单之间的区别 还提到 AppCache 应用程序缓存 Web Storage 的 LocalStorage 吗 https stackoverflow com questions 1098
  • java.lang.LinkageError 类加载错误

    我的系统 Java Eclipse 环境有一些问题 我收到此错误 但我不明白出了什么问题 java lang LinkageError loader constraint violation loader instance of jsyst
  • 如何在 Swift 中获取短格式的当前日期

    在下图中 您可以看到我编写的代码以及所有变量的值 class fun getCurrentShortDate gt String var todaysDate NSDate var dateFormatter NSDateFormatter
  • 如何使用 Windows API 捕获屏幕和鼠标指针?

    我使用下面的代码以位图形式捕获屏幕 屏幕已被捕获 但我无法将鼠标指针放在屏幕上 你能建议一些替代方法来捕获鼠标吗 private Bitmap CaptureScreen Size size is how big an area to ca
  • SQL 增加一个数字

    Problem 我想根据表格增加一个数字 例如 如果一个表包含 排 1 1 2 3 4 4 4 5 mytable 列应在此基础上增加 取上一列中的 max row 1 所以结果应该是这样的 6 6 7 8 9 9 9 10 这是到目前为止
  • 如何获取 PFX 密钥的容器名称?

    不久前 我使用如下命令将 PFX 密钥安装到容器中 sn i mykey pfx VS XXX 但两个月后我忘记了容器名称 VS XXX 所以我的问题是 如何取回比名字 我知道密钥名称 我有这个密钥 我知道密钥密码短语 下载Keypal h
  • 将材料设计与 VueJS 结合使用

    我正在使用 VueJs 构建一个 Web 应用程序 并且需要一个 css 框架来设计一些东西 而不是从头开始 我找到了material design lite www getmdl io 但我无法让它与vue router一起正常工作 我的
  • 跨多个范围的多个条件格式规则?

    我需要执行以下操作 如果单元格 E 包含大于 30 的数字且单元格 L 包含大于 100 的数字 则突出显示一行 此规则需要应用于所有行 你能帮忙吗 你应该使用条件格式 http office microsoft com en us exc
  • Electron:打开默认电子邮件客户端

    我正在使用选举框架来构建 exe 和 dmg 文件 在应用程序中 我有一个按钮 单击该按钮必须打开系统上安装的默认电子邮件应用程序才能发送电子邮件 以下是打开电子邮件客户端的代码 shell openExternal mailto emai
  • 本地硬重置后无法推送到原点

    我最近对本地 git 存储库进行了硬重置 换句话说 我将其重置为较早的时间点 现在当我尝试向上推时origin它告诉我不能 因为origin包含比我的存储库晚的工作 这是有道理的 但我不关心源在我的本地存储库之后所做的工作 如果我先pull
  • @protocol 与类簇

    那些主要是什么pro and contra for protocol and 类簇 http developer apple com library mac documentation Cocoa Conceptual CocoaFunda