@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 与类簇 的相关文章

  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • Cocoa - 捕获 NSStatusItem 鼠标悬停事件

    当用户的鼠标悬停在我的 NSStatusItem 上时 如何执行函数 如果您分配自定义NSView给你的NSStatusItem s view属性 您可以覆盖NSResponder方法mouseEntered mouseMoved and
  • iPhone X 将对象底部与安全区域对齐会破坏其他设备上的外观

    关于 iPhone X 自动布局怪癖的问题 我有两个按钮 以前这些按钮将与超级视图底部对齐 偏移量为 20 以免它们接触屏幕底部 此后我将链接更改为安全区域而不是超级视图 Here s the original setup Looks go
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • 如何按字母顺序对 UITableView 分区进行排序?

    我有一个包含 3 个类别的分段 UITableView 我正在使用这段代码 NSArray arrayOne NSArray arrayWithObjects one two three four nil NSDictionary dict
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 无法以编程方式快速设置 NSLayoutConstraint 乘数...“无法分配给此表达式的结果

    我试图以编程方式快速设置乘法器的约束 当我设置该值时 它只会给我错误 无法分配给该表达式的结果 我用 IBOutlet 声明了 NSLayoutConstraint 然后设置乘数 就像我对另一个常量所做的那样 效果很好 但这个不会接受它 I
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • Xcode 异步单元测试在主线程上等待

    我正在尝试使用 Xcode 中的单元测试来测试一些异步代码 但主线程被阻塞 问题在于 某些正在测试的代码期望从 iOS 类 AVFoundation 接收回调 但是 AVFoundation 类似乎只会在主线程上回调 问题是 如果我正在进行
  • 从 NSImage 获取像素和颜色

    我创建了一个 NSImage 对象 理想情况下想确定它包含多少个像素颜色 这可能吗 此代码呈现NSImage into a CGBitmapContext void updateImageData if image return Dimen
  • iOS:Facebook 登录访问令牌错误:由于模拟器错误,回退到从 NSUserDefaults 加载访问令牌

    根据说明进行配置后 我不断收到此错误 并且无法在我的应用程序上成功使用 Facebook 登录 我在 XCode 8 1 上运行它并使用 iOS 10 1 模拟器 我按照 Facebook iOS SDK 指南中的步骤操作 并将 Faceb
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • 所有 RestKit 项目在归档时都无法构建

    这个问题涉及RESTKIT 0 9 x 如果您是 Restkit 新手 请考虑使用较新的版本0 10 x https github com RestKit RestKit tree v0 10 1 branch 我最近继承了一个项目 使用r
  • 在可可中将 NSMutableArray 写入文件时出现问题

    一个真正的初学者问题 我有一个 NSView 子类 在其中创建一个包含 NSValues 的 NSMutableArray 当我想使用 writetofile atomatically 将数组写入文件时 文件已创建 但它不包含可变数组所包含

随机推荐

  • 创建表单时出错。有关详细信息,请参阅 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