NSString Compare: 和 isEqual(ToString): 之间有区别吗?

2023-11-27

有时我会发现测试两个是否存在的代码NSStrings 是一样的:

if ([str1 compare:str2] == NSOrderedSame) {
    // Do something
}

现在,我相信这比使用的可读性更差isEqualToString:它也有一些令人讨厌的副作用,比如str1 == nilif(..) 计算结果为 true,或者当str2 == nil根据苹果文档,浩劫可能会降临到我们身上。 (Edit:正如哈特芬奇指出的那样,如果str1 == nil && str2 == nil两种变体都会产生错误的结果。所以无论如何你都需要警惕这种情况)。

但在我反对公司代码中的这些声明之前,我想确保我没有错过一些重要的点。

所以我的问题基本上可以归结为:compare: to NSOrderedSame and isEqual:?


阅读文档,我发现您尚未提到的唯一区别是:

  1. isEqualToString:首先比较id两个字符串的组合,这对于频繁重复使用字符串的应用程序来说是潜在的速度增益。来自 NSString 参考:

    返回值:
    如果 String 相当于接收者(如果它们具有相同的 id 或者如果它们在文字比较中是 NSOrderedSet),则为 YES,否则为 NO。

  2. isEqualToString:确实更类似于compare: options:NSLiteralSearch,如上面的引用所示。 NSLiteralSearch 对于 Unicode 字符表示更加挑剔:

    “Literal”应用于字符串比较时意味着不应用各种 Unicode 分解规则,而是单独比较 Unicode 字符。因此,例如,表示为组合字符序列“O”和变音符号的“Ö”与表示为一个 Unicode 字符的“Ö”不相等。

与您问题中提到的误报和未定义行为相比,这实际上只是挑剔。

Source: NSString 类参考

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

NSString Compare: 和 isEqual(ToString): 之间有区别吗? 的相关文章

  • 如何从整数生成 unicode 字符?

    我想创建一个 Unicode 字符数组 但我不知道如何将整数转换为 Unicode 表示形式 这是我到目前为止的代码 NSMutableArray uniArray NSMutableArray alloc initWithCapacity
  • 对 UIView 框架进行动画处理,子视图 UIScrollView 并不总是进行动画处理

    In this http screencast com t YvjNf5Z1xMn例子 当我对 tabBarController 进行动画处理时 为了实现全屏效果 我对 PhotoViewerViewController 的框架进行了动画处
  • 使用 Java 创建 plist

    有没有一种简单的方法可以用Java创建plist 结果应该与 Objective C 中序列化字典相同 The PList http code google com p xmlwise source browse trunk src mai
  • Objective C iPhone 何时将对象引用设置为 nil

    我使用 Objective C 和 Cocoa 框架进行开发已经有一段时间了 然而 我仍然不太清楚 我什么时候应该将对象引用设置为 nil 我知道建议在释放具有委托的对象之前执行此操作 并且您还应该在保留子视图的 viewDidUnload
  • 带有嵌套数组的 NSPredicate

    我有以下对象结构 类别 子类别 子类别的 nsarray 子类别 问题 问题的 nsarray 问题 问题 nsstring 答案 ns字符串 我需要的是用给定的子字符串搜索任何问题 以下谓词不起作用 NSPredicate predica
  • 如何消除错误 服务无效 请检查您的设置并尝试

    我一直在努力工作 一切都很顺利 只是突然间 当我尝试构建我的项目时 我在 xCode 中收到以下错误 1 在构建时的警报框中 服务无效 请检查您的设置并重试 0xE8000022 只需重新启动您的 iPod 或 iPhone 即可
  • 未调用[super方法]时发出警告

    不使用 ARC 时 如果未在 dealloc 方法中调用 super dealloc 您会收到警告 我正在尝试实现与经常被子类化的类类似的东西 以在实现子类的人不调用 super 时警告他们 有任何想法吗 llvm的最新版本添加了一个属性
  • 如何隐藏标签栏并在屏幕上显示完整的表格视图?

    在我的应用程序的实现中 我有一个带有 5 个不同选项卡的选项卡栏控制器 通过以下代码隐藏标签栏后 void hideTabBar for UIView view in self tabController view subviews if
  • 多对多关系中的 KVO 对象属性

    我有一个核心数据对多关系 由父 gt 子组成 我想设置一个键值观察机制 以便当任何子对象上的属性 例如 firstName lastName 发生更改时 它会触发通知 使用标准 KVO 语法时 self parentObject addOb
  • 如何以编程方式设置 iOS 6/7 Delta

    当我离开 iOS6 时 我正在使用 Xcode 4 6 开发 UISplitView 应用程序 我有设计 现在我迁移到新的 Xcode5 现在我有这样的设计 UINavigationBar 完全重叠我的 UISearchBar Leo Na
  • GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙盒)

    我正在努力将回合制比赛集成到我的游戏中 几天前 我开始从 GameKit API 收到奇怪的错误 指出本地玩家未经过身份验证 尽管他已通过身份验证 当我启动应用程序时 authenticateHandler被调用 显示视图控制器 输入密码后
  • 如何在 UICollectionView PerformBatchUpdates 块中排序移动、插入、删除和更新?

    In my UICollectionView 我使用一个简单的自定义对象数组来生成和显示单元格 有时数据会发生变化 我想一次性为所有变化添加动画效果 我选择通过跟踪第二个数组中的所有更改 比较两个数组并在一个数组内生成一组移动 插入 删除和
  • 如何在 Objective-C 中将 RGB 十六进制字符串转换为 UIColor?

    我有来自 url 数据的颜色值 如下所示 ff33cc 如何将此值转换为 UIColor 我正在尝试使用以下代码行 我没有正确获取 baseColor1 的值 看来我应该把那磅炭拿掉 还有其他方法吗 NSScanner scanner2 N
  • 解析后 UITableView 委托和数据源在单独的类中

    我需要从一个单独的类设置 UITableView 委托和数据源 方法调用解析后数据准备就绪 但每次我的表都是空的 我正在使用 ARC 这是简化的代码 HomeViewController h import
  • 核心数据:解决一个奇怪的 EXC_BAD_ACCESS 错误

    我在核心数据方面面临着一个非常奇怪的问题 我们来描述一下 定义 假设我有两个模型 ModelA and ModelB 在数据模型中ModelA有参考ModelB作为一对多关联 因此ModelB与 具有一对一关联ModelA Update 当
  • Apple 推送通知徽章编号

    我开发了服务器端应用程序 以在收到新通知后将徽章编号维护为递增或递减 并在看到通知后删除它工作正常 但是显示徽章时存在一些问题 实际情况是 在设备上收到新通知后 我单击取消按钮 然后徽章编号正确显示 但之后我将打开应用程序并关闭应用程序徽章
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • insertObject:atIndex 的复杂性:

    复杂度是多少 NSArray insertObject atIndex N 或常数 另外 如何找出各种 Objective C 语句的复杂度 有一个在这里讨论 http www cocoadev com index pl NSMutable
  • Objective-C 声明的 @property 属性(非原子、复制、强、弱)

    有人可以向我详细解释一下我何时必须使用每个属性 nonatomic copy strong weak等等 对于声明的属性 并解释每个属性的作用是什么 某种例子也很好 我正在使用ARC 非原子的 Nonatomic https stackov
  • 桌面上的 AVAudioSession?

    在 mac 桌面上 我试图录制系统声音 以及可选的麦克风声音 但一开始我只是录制系统声音 我正在遵循本指南 https www appcoda com ios avfoundation framework tutorial https ww

随机推荐

  • 在自托管 WebApi 中获取 HttpRequest 上下文

    如何从自托管 MVC WebAPI 访问查询字符串 对以下内容的调用因 NRE 失败 因为 Current 为空 又名 null System Web HttpContext Current Request myQuery 我需要访问控制器
  • 使用 boost::asio 的 AF_NETLINK (netlink) 套接字

    我正在编写基于的多播客户端 服务器应用程序this and this 效果很好 但是 当计算机中的活动网络接口数量发生变化时 我还需要执行一些操作 例如示例部分中的程序这一页 does 我想我应该使用 boost asio local 中的
  • 在 Windows 服务中运行 cdb 时无法下载 microsoft 符号

    我有一个 NET窗口服务那是在呼唤cdb exe分析故障转储 我想从以下位置下载符号http msdl microsoft com需要时自动使用参数 y srv c symbols http msdl microsoft com downl
  • Python 文件到 MSI Windows 安装程序

    因此 我可以使用 PyInstaller 制作一个单文件可执行文件 并在文件夹中的其他文件中制作标准可执行文件 但是如何将 Python 文件转换为 MSI 安装程序 以便万无一失地在桌面上创建快捷方式呢 用于分发 以便用户不需要安装Pyt
  • Excel进程未关闭[重复]

    这个问题在这里已经有答案了 我有这个 C 程序 它永远不会关闭 Excel 进程 基本上 它会查找某个字符串在 Excel 中某个范围内出现的实例数 我尝试了各种方法 但没有效果 有一个表单正在调用此方法 但这不会改变进程未关闭的原因 我看
  • JQuery / JS:检测用户的滚动尝试,没有任何窗口溢出滚动到

    我正在开发一个过渡网站 虽然我想使用用户的滚动尝试作为过渡启动器 但我不希望有窗口滚动条 现在 我只是用 jquery 检测用户滚动 我已经将窗口大小设置为比用户屏幕的滚动条高 1px 尽管这是我试图避免的 scroll function
  • [Android]NumberPicker 选中项改变颜色

    是否可以更改 numberpicker 中所选项目的颜色 以便每次出现新的中心子 TextView 时将其颜色更改为我喜欢的颜色 但我没有找到任何与此相关的样式或 API 公开 I tried to follow many answers
  • 更改 Chrome 4xx 页面

    我正在部署一个信息亭系统 该系统使用 Chrome 来显示在 jetty 中运行的 java web 应用程序 该应用程序以 Windows 服务包装器启动 系统启动后需要一些时间才能让 jetty 准备好提供内容 因此现在我需要等待 然后
  • 如何按照声明的顺序读取类属性?

    我正在编写一个读取类属性并将它们存储在列表中的元类 但我希望列表 cls columns 尊重声明顺序 即 mycol2 mycol3 zut cool menfin a在我的例子中 import inspect import pprint
  • ActiveMQ Jolokia API 如何获取完整的消息正文

    我想编写自己的 ActiveMQ 监视器 我可以从队列中获取队列和消息 但消息正文 内容 很短 如何获得完整的消息正文 这个我已经测试过了 Get Always errors http localhost 8161 api jolokia
  • 按行数拆分数据框

    我有一个由 400 000 行和大约 50 列组成的数据框 由于这个数据帧太大 处理起来计算量太大 我想将此数据帧分割成更小的数据帧 然后运行我想要运行的函数 然后最后重新组装数据帧 我没有想用来分割此数据框的分组变量 我只想按行数将其拆分
  • Rails/ActiveRecord:将更改保存到模型的关联集合

    我是否必须保存对模型集合中各个项目的修改 或者是否可以在保存模型时调用一种方法来保存它们 save似乎没有这样做 例如 irb gt rental gt
  • 使用 PowerShell 以 UTF-8 写入无 BOM 的文件

    Out File使用 UTF 8 时似乎会强制使用 BOM MyFile Get Content MyPath MyFile Out File Encoding UTF8 MyPath 如何使用 PowerShell 以 UTF 8 格式写
  • 创建已完成的任务

    我正在实现一个方法Task
  • Scala“<-”用于理解

    我发现 Scala 总是对任何事情都有 自然的解释 总是类似 哦 但这只是用这个和那个参数在这个和那个对象上调用的函数 从某种意义上说 没有什么是真正像我们从其他语言中了解到的那样具有编译器魔力 我的问题是关于 lt 运算符如以下代码中所使
  • Jersey 客户端下载并保存文件

    我是球衣 JAX RS 实施的新手 请在下面找到我的球衣客户端代码来下载文件 Client client Client create WebResource wr client resource http localhost 7070 up
  • iPhone 模拟器和 applicationWillTerminate()

    当我的应用程序在 iPhone 模拟器中运行时 委托方法 void applicationWillTerminate UIApplication application 仅在我第一次按下 iPhone 模拟器的主页按钮时调用 按下主页按钮并
  • 找不到模块“puppeteer-core/internal/common/Device.js”

    重现问题的步骤 我使用 npm i puppeteer 安装了 puppeteer 使用 WSL ubuntu 当我尝试在一个简单的测试中加载 puppeteer 时 import puppeteer from puppeteer 我收到错
  • Moviepy 无法读取文件的持续时间

    我一直在使用 Moviepy 将几个较短的视频文件合并为一个小时长的文件 一些小文件被 损坏 它们包含视频但未正确完成 即它们使用 VLC 播放 但没有持续时间 并且您无法在视频中跳过 当我尝试使用 VideoFileClip file 函
  • NSString Compare: 和 isEqual(ToString): 之间有区别吗?

    有时我会发现测试两个是否存在的代码NSStrings 是一样的 if str1 compare str2 NSOrderedSame Do something 现在 我相信这比使用的可读性更差isEqualToString 它也有一些令人讨