关于NSMutableArray, removeObject:和 removeObjectIdenticalTo:
之间有什么区别?API Reference中的措辞似乎非常相似:
rO:删除所有出现的内容 给定对象的接收者
rOIT:删除所有出现的a 在接收器中给出对象
我错过了什么?
更新:我的意思是,我如何在它们之间做出选择。
答案 0 :(得分:28)
removeObjectIdenticalTo:
将删除指向的对象,removeObject:
将对数组中的所有项运行isEqual:
,如果返回true则将其删除。
编辑:
如果你知道你有相同的对象(比如NSViews或类似物),你应该使用removeObjectIdenticalTo:
,对于可能不是同一个对象的字符串和对象,你应该使用removeObject:
,但应该考虑等于实际目的。
答案 1 :(得分:2)
@cobbal真的很棒的答案:)看到你的答案后,我真的明白了它的不同之处。但是起初它似乎对我来说有点困惑,因为我是Objective-C编程的新手,所以我只想通过提供一个例子来增强你的答案。希望在看到这个例子时帮助其他新手:)
#import<Foundation/Foundation.h>
int main()
{ int i;
printf("Enter 1 to perform removeObject function.\n Enter 2 to perform removeObjectIdenticalTo functionality.\n ");
scanf("%d",&i);
@autoreleasepool{
NSString* color;// int count;
NSString * s1 = [NSMutableString stringWithString: @"Red"];
NSString * s2 = [NSMutableString stringWithString: @"Yellow"];
NSString * s3 = [NSMutableString stringWithString: @"Red"];
NSString * s4 = [NSMutableString stringWithString: @"Cyan"];
NSMutableArray * myColors = [NSMutableArray arrayWithObjects: s1,s2,s3,s4,nil];
if(i == 1)
{
[myColors removeObject: s1]; //will remove both s1 and s3 object because their contents are same
//we can also use [myColors removeObject: @"Red"]; instead of above statement. However the functionality remains same .
for(color in myColors)NSLog(@"%@",color);
}
else if (i == 2){
[myColors removeObjectIdenticalTo: s1]; //deletes only s1 object in the array myColor
for(color in myColors)NSLog(@"%@",color);
}
}
return 0;
}
PS:这只是一个例子。你可以在@cobbal的回答中找到答案。