iOS NSMutableArray "removeObjectIdenticalTo" vs "removeObject"

NSMutableArray 有多种可以删除元素的方法。

其中 removeObject,removeObjectIdenticalTo 这两个方法是有区别的。

[anArray removeObjectIdenticalTo:anObject];

 

removeObject:anObject 删除所有与 anObject “isEquals” 的元素。

removeObjectIdenticalTo:anObject 删除所有与 anObject 地址相同(同一个对象)的元素。

举个例子:

数组中包含多个 NSString,其中有两个属于不同对象的,值均为 “Hello” 的元素。

调用 removeObject 将删除所有值为 “Hello” 的元素。

调用 removeObjectIdenticalTo 只删除与其地址相同的对象。

NSString *str1 = [[NSString alloc] init];
NSString *str2 = [[NSString alloc] init];
NSString *str3 = [str1 stringByAppendingFormat:@"Hello"];
NSString *str4 = [str2 stringByAppendingFormat:@"Hello"];

NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];
[muArray addObject:@"How are you"];
[muArray addObject:str3];
[muArray addObject:str4];
for (NSObject * object in muArray) {
    NSLog(@"item:%@", object);
}

if ([str3 isEqual:str4]) {
    NSLog(@"str1 isEqual str2");
}
if (str3  == str4) {
    NSLog(@"str1 == str2");
}
[muArray removeObjectIdenticalTo:str3];
for (NSObject * object in muArray) {
    NSLog(@"item:%@", object);
}

此例子中,只有 str3 被删除。

如果把 removeObjectIdenticalTo 换为 removeObject,str3 和 str4 均被删除。

 

posted @ 2015-11-19 20:08  davesuen  阅读(660)  评论(0编辑  收藏  举报