可可 – 检查NSString实例是否包含在NSArray中

可可 – 检查NSString实例是否包含在NSArray中,第1张

概述我有一个字符串数组,我想检查一个字符串是否包含在数组中。如果我在数组上使用containsObject:message,我得到正确的结果。所有具有相同字符串的NSString对象指向同一个对象吗?或者为什么是containsObject:工作? NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherString 我有一个字符串数组,我想检查一个字符串是否包含在数组中。如果我在数组上使用containsObject:message,我得到正确的结果。所有具有相同字符串的Nsstring对象指向同一个对象吗?或者为什么是containsObject:工作?

NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherStringValue,nil];if([stringArray containsObject:@"2"]){  //DO SOMETHING}
解决方法 是的,硬编码的Nsstrings(字符串文字)(即源代码中的任何@“…”)被转换为在进程运行时无限期存在的字符串。

然而NSArray的containsObject:方法调用isEqual:对它的对象,因此甚至一个动态创建的字符串,如[Nsstring stringWithFormat:@“%d”,2]将返回在你的示例代码片段。
这是因为Nsstring的isEqual:(或更确切地说它的isEqualToString :)方法被实现为内容感知(与比较指针身份),因此对于包含非常相同的字符序列的任何字符串对返回YES(在比较时) ,无论它们如何和何时被创造。

要检查等号(指针)标识,你必须枚举你的数组和比较通过

Nsstring *yourString = @"foo";BOol IDenticalStringFound = NO;for (Nsstring *someString in stringArray) {    if (someString == yourString) {        IDenticalStringFound = YES;        break;    }}

(你很可能不想要,但)。

或以更方便的方式:

BOol IDenticalStringFound = [stringArray indexOfObjectIDenticalTo:someString] != NSNotFound;

(你很可能不会想要这一个)。

加起来:

所以,你从containsObject得到肯定的答复的原因是不是因为文字字符串共享相同的常量实例,因为containsObject:通过调用isEqual:,这是内容感知。

您可能想阅读isEqual的(简短)文档:从NSObject protocol。

总结

以上是内存溢出为你收集整理的可可 – 检查NSString实例是否包含在NSArray中全部内容,希望文章能够帮你解决可可 – 检查NSString实例是否包含在NSArray中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存