在NSMutableArray方法中,removeObject:vs removeObjectIdenticalTo:

时间:2009-03-28 03:28:31

标签: objective-c

关于NSMutableArray, removeObject: removeObjectIdenticalTo:

之间有什么区别?

API Reference中的措辞似乎非常相似:

  

rO:删除所有出现的内容   给定对象的接收者

     

rOIT:删除所有出现的a   在接收器中给出对象

我错过了什么?

更新:我的意思是,我如何在它们之间做出选择。

2 个答案:

答案 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的回答中找到答案。