NSDictionary 的 objectForKey: 依赖于同一性还是相等性?

2024-01-01

假设我有一个名为Person拥有以下财产socialSecurityNumber,并且这个类覆盖了isEqual:当社会保障号属性相等时返回 true 的方法。并说我已经放了一堆实例Person进入一个NSDictionary.

如果我现在实例化一个newPerson对象恰好具有与字典中已有的社会安全号码相同的社会安全号码,并且我确实如此[myDictionary objectForKey:newPerson],它会使用isEqual:并返回 YES,或者比较指针并返回 NO?

我知道我可以编写一个简单的测试来找出答案,但我想了解到底如何objectForKey:在字典中找到匹配项,以及通常这在 Cocoa 中的一致性(即NSArray's indexofObject:工作一样吗?)


NSDictionary工作原理类似于哈希表。所以它同时使用-hash and -isEqual:在字典中查找与给定键对应的对象。

所以回答你的问题NSDictionary,这使用isEqual:而不是指针比较。但你也应该实施hash此外isEqual:在你的Person类以使其发挥作用。

  • 来自NSDictionary 类参考文档 https://developer.apple.com/library/ios/#documentation/cocoa/reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html:

字典中的键值对称为条目。每个条目都包含一个表示键的对象和第二个表示该键的值的对象。在字典中,键是唯一的。也就是说,单个字典中没有两个键是相等的(由 isEqual: 确定)。

  • 来自isEqual:方法文档 https://developer.apple.com/library/ios/#documentation/cocoa/reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/isEqual::

如果两个对象相等,则它们必须具有相同的哈希值。如果您在子类中定义 isEqual: 并打算将该子类的实例放入集合中,那么最后一点尤其重要。确保您还在子类中定义了哈希。

  • 这种行为在 Cocoa 中的各种容器类中是一致的。例如,从NSArray's indexOfObject:方法文档 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html:

从索引 0 开始,向数组的每个元素发送 isEqual: 消息,直到找到匹配项或到达数组末尾。此方法将 anObject 参数传递给每个 isEqual: 消息。如果 isEqual:(在 NSObject 协议中声明)返回 YES,则对象被视为相等。


您应该始终阅读文档:正如上面引用的摘录所指出的,这些细节通常在方法文档的“讨论”或“特殊考虑”部分或类文档本身的“概述”部分中进行解释。

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

NSDictionary 的 objectForKey: 依赖于同一性还是相等性? 的相关文章

  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 如何构建 Objective-C 静态库? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些 Objective C 类 目前在 Cocoa 应用程序 Mac OS X 和 Cocoa Touch 应用程序 iOS 中
  • UITableView 在单元格刷新时滚动到顶部

    我有一个 UITableView 其中一个单元格的大小是动态调整的 以适应其中的 UITextView 每当键入一个键时 单元格都会检查计算出的高度是否增加 就像换行符一样 因此它可以告诉表单元格的高度需要重新计算 我用这段代码做到了这一点
  • 如何缩放曼德尔布罗集

    我已经成功实现了维基百科文章中所述的曼德尔布罗集 但我不知道如何放大特定部分 这是我正在使用的代码 void createSetWithWidth int width Height int height Thing void int int
  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 如何将设备上未保存的图片上传到dropbox帐户?(IOS)

    Dropbox RestClient 仅保存文件 所以我想先将图像保存在本地文件夹中 然后上传它 结果它保存了文件 但它已损坏 NSString localPath NSBundle mainBundle pathForResource I
  • 增加 iPhone 的推送通知徽章

    是否可以在收到通知时增加徽章值 或者我应该将计数作为有效负载发送吗 如果我每次都将徽章值发送为 1 那么如果应用程序未打开 我如何增加应用程序图标中的徽章值 我已经使用了这段代码 但不起作用 void application UIAppli
  • Objective-C 点表示法与类方法?

    请注意 我特别指的是点表示法与类方法一起使用 而不是与实例方法一起使用 出于好奇 我想看看如果我尝试在类方法中使用 Objective C 点表示法语法会发生什么 我的实验如下 import
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 禁用选择单个 UITableViewCell

    如何禁止在 UITableView 中仅选择单个单元格 我有几个 我只想禁用最后一个 要停止仅选择某些单元格 请使用 cell userInteractionEnabled NO 除了阻止选择之外 这还会阻止为设置了该选项的单元格调用 ta
  • 如何使用文档提供者扩展?

    我正在学习更多有关 ios 扩展的知识 例如 今日扩展 照片编辑扩展 动作延伸 自定义键盘扩展 在所有这些中 我在学习上没有困难 但最近我尝试学习 文档提供程序扩展 令我惊讶的是 在互联网上没有找到任何相关教程谈论如何使用它 与其他人一样一
  • 尝试使用 Xcode 的新 UI 测试运行多个测试失败

    当我尝试在新的 Xcode beta 中同时运行多个 UI 测试时 它在第一次测试后失败 并在第一次测试后的每个测试中出现错误 UI 测试失败 应用程序状态仍未终止 有人解决这个问题了吗 我也遇到过同样的问题 看来 至少就我而言 应用程序从
  • iOS通过AVAssetWriter反转音频

    我正在尝试使用 AVAsset 和 AVAssetWriter 在 iOS 中反转音频 以下代码可以正常工作 但输出文件比输入文件短 例如 输入文件的持续时间为 1 59 但输出文件的持续时间为 1 50 且音频内容相同 void reve
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • iOS:GMail API - 通过电子邮件发送附件

    我能够成功发送没有附件的电子邮件 但是 当我尝试使用 GTLUploadParamaters 上传附件时 出现 501 错误 我尝试添加照片库中附件的 NSData 以及仅发送图像的 URL 在这两种情况下我都得到了同样的错误 Create
  • 核心数据二进制数据允许外部存储崩溃

    我在 iOS 12 0 1 上发生崩溃 日志如下 ImageIO CFDataGetBytes data 0x28539b2f0 size 154262 offset 8 count 8 dst 0x16dbf86f0 External d
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • Objective-C 语法是什么,椭圆式点表示法? “……”

    我在 Joe Hewitt 的 Three20 源代码中注意到了这一点 而且我以前从未在 Objective C 中见过这种特殊的语法 甚至不知道如何在适当的谷歌搜索中引用它 来自 UITableViewDataSource TTSecti

随机推荐

  • iOS 部署目标设置为 iOS 4.2。该应用程序可以在运行早期版本 iOS 的设备上运行吗?

    如果应用程序在 Xcode 中编译 其 iOS 部署目标设置为 iOS 4 2 它是否可以在运行早期版本 iOS 的设备上运行 该应用程序不具有 iOS 4 独有的功能 我全新安装了 Snow Leopard 和 XCode 3 2 5 并
  • 如何从 html 页面调用 javascript 模块 (type=module) 中声明的函数

    我正在努力使用 javascript 模块 我有一个 html 文件和一个 JS 模块 我在 javascript 文件中定义了一个函数 我想从我的 HTML 页面调用该函数 这是我的代码 索引 html
  • 使用 Reactor 的非阻塞 ReentrantLock

    我需要限制同时处理同一资源的客户端数量所以我尝试实现模拟 lock lock try do work finally lock unlock 但以非阻塞方式使用 Reactor 库 我有这样的东西 但我有一个问题 有一个更好的方法吗或者也许
  • Groovy:将 XML 元素从一个文档复制到另一个文档

    我是 Groovy 新手 遇到了一个简单的问题 我想做的就是从一个 XML 文件中提取某些元素并用它创建一个新文件 这是一个示例 XML 让我们使用 Maven pom 文件
  • 在子数组之间移动行

    我有许多子数组 比如 2 个 为了简单起见 每个子数组具有相同的行数和列数 子数组中的每个位置都由 1 10 中的数字占据 我想做的是根据某种移动速率 m 0 1 在子数组之间随机移动行 m 0 对应于不移动 而 m 1 表示所有子数组中的
  • 初始化的只读字段为空,为什么?

    谁能解释一下为什么private readonly Int32 array new 8 7 5 can be null 在这个例子中 它有效 并且 array总是不是null 但在我的公司代码中我有类似的代码并且 array总是null 所
  • 来自命令行的 Behat“base_url”

    我想知道是否可以通过命令行设置base url 例子 bin behat base url http google fr 为了灵活性 我想避免创建新的配置文件并在每次必须测试新的 url 时通过命令行传递它 这里有什么技巧可以做到这一点吗
  • 使用 Spring MVC 的 Twitter Bootstrap

    我想将 Twitter Bootstrap 与现有的 Spring MVC 项目集成 搜索返回抽象结果 没有概述如何将以 UI 为中心的 Bootstrap 与 Spring MVC 集成的教程或文章 集成框架所涉及的配置步骤是什么 Tha
  • scala zip 列表到元组

    使用 JodaTime 尝试将 List LocalDate 转换为 Tuple2 JodaTime JodaTime 这样我就可以像这样进行多重分配 val expire now List row expireDate new JodaD
  • 在批处理文件中,组合两个字符串以创建组合路径字符串

    我需要获取两个字符串并将它们组合成批处理文件中的单个路径字符串 类似于 NET 中的 Path Combine 方法 例如 无论字符串是 C trunk 和 ProjectName Project txt 还是 C trunk 和 Proj
  • 页面加载时未使用哪些 javascript 文件

    是否可以找出网页上未使用的 javascript 文件 而无需添加控制台日志或调试或删除它们以查看是否出现问题 我正在寻找一个工具 或者命令行脚本或firefox插件等 例如 假设我将这些包含在标题中 在页面
  • 实体框架数据库优先:时间戳列不起作用

    使用数据库优先方法 我希望每当我尝试更新一个 过时的 实体时 我的应用程序都会抛出并发异常 而数据库中的相应行已被另一个应用程序 用户 会话更新 我在 Net 4 5 上使用实体框架 5 相应的表有一个时间戳列来维护行版本 我过去通过向您希
  • 为什么我的 Azure 移动服务不接受 ADAL.js 发送的不记名令牌?

    我使用带有隐式流的 ADAL js 来验证 AngularJS 应用程序 以便能够访问 Azure 移动服务 API 我已在 AMS Azure 移动服务 的 身份 选项卡中设置 Azure AD 身份信息 如下所示 应用程序 URL 设置
  • 使屏幕闪烁以提醒用户

    使用 NET 3 5 Winforms 我如何使整个屏幕在红色和白色之间闪烁 闪烁一秒钟 我有一个大屏幕 仅用于显示受监控设备的状态 我希望它在用户应该查看的事件发生时闪烁作为通知 谢谢 使用 tbischel 的建议 这是计时器的一些示例
  • 有效地复制/复制/备份数据库表 - mysql

    Reason 我被分配运行一些脚本来推进一个网站 这是一个梦幻足球网站 该网站的多个实例位于不同的域中 有些拥有超过 8 万用户 每个用户应该拥有一个由 15 名玩家组成的团队 因此 某些表具有 No users x No players
  • 使用 JavaScript 检查/取消检查无线电输入

    我有一个无线电输入组 如果选中了某个收音机 然后我再次单击它 它将变为未选中状态 有没有办法获取收音机以前的状态onClick event
  • 动态添加刻度标记?

    我想知道是否有任何方法可以在渲染图形后动态添加scale x标记 也许通过像这样的函数 zingchart exec myChart addscalexmarker type line range 14 label text label y
  • 从绝对路径获取流?

    我有这个方法 public RasImage Load Stream stream 如果我想加载一个像这样的网址 string url http localhost Application1 Images Icons hand jpg 我怎
  • ASP.NET MVC 的 Windows Azure 存储模拟器连接字符串?

    我正在搜索需要定义才能使用 Windows Azure 存储模拟器的连接字符串 到目前为止 我找到的所有消息来源都表明这些连接字符串应该转到ServiceDefinition and ServiceConfiguration文件位于 Win
  • NSDictionary 的 objectForKey: 依赖于同一性还是相等性?

    假设我有一个名为Person拥有以下财产socialSecurityNumber 并且这个类覆盖了isEqual 当社会保障号属性相等时返回 true 的方法 并说我已经放了一堆实例Person进入一个NSDictionary 如果我现在实