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中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)