iPhone - removeObjectIdenticalTo行为

Oli*_*ver 0 iphone xcode parsing nsmutablearray ios

我正在尝试这段代码:

NSString* str1 = @"Toto";
NSMutableArray* arr = [NSMutableArray array];

[arr addObject:[NSNull null]];
[arr addObject:@"toto"];
[arr addObject:[NSNull null]];
[arr addObject:@"Toto"];
[arr addObject:[NSNull null]];
[arr addObject:str1];

NSLog(@"Tableau à %d elements : %@", [arr count], arr);

[arr removeObjectIdenticalTo:str1];

NSLog(@"Tableau à %d elements : %@", [arr count], arr);
Run Code Online (Sandbox Code Playgroud)

为什么removeObjectIdenticalTo:str1在这里做同样的事情比removeObject:str1或者 removeObjectIdenticalTo:@"Toto",因为它应该是基于对象的地址?

rma*_*ddy 5

发生这种情况是因为编译器正在根据您处理字符串文字的事实进行一些优化.编译器可能将字符串@"Toto"的所有实例组合到单个内存地址的单个对象中.这可以做到,因为它们是不可变的.

这就是为什么有些人会因为使用==运算符来比较两个字符串而感到困惑.它实际上可以在恰当的条件下工作,但绝不能依赖它.