【问题标题】:In NSMutableArray methods, removeObject: vs removeObjectIdenticalTo:在 NSMutableArray 方法中,removeObject: vs removeObjectIdenticalTo:
【发布时间】:2009-03-28 03:28:30
【问题描述】:

关于 NSMutableArray,removeObject:removeObjectIdenticalTo:

有什么区别

API 参考中的措辞似乎非常相似:

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

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

我错过了什么?

更新:我的意思是,我将如何在它们之间进行选择。

【问题讨论】:

  • 请注意,自从提出这个问题以来,这两种方法的文档都已更新,以明确说明如何选择要删除的对象。

标签: objective-c


【解决方案1】:

removeObjectIdenticalTo: 将删除指向的对象,removeObject: 将对数组中的所有项目运行 isEqual:,如果返回 true,则将其删除。

编辑:

如果你知道你有相同的对象(比如 NSViews 或类似的对象),你应该使用removeObjectIdenticalTo:,而对于字符串和对象可能不是同一个对象,你应该使用removeObject:,但出于实际目的应该被认为是相等的.

【讨论】:

  • 只是为了搭载@cobbal 的回答。考虑差异; removeObject 转到数组中的每个对象并向其发送消息 isEqual。一个类可以实现这个方法,根据自己的判断返回YESNO。例如,如果两个对象具有相同的属性,则可以认为它们相等。 removeObjectIdenticalTo 方法删除一个对象当且仅当它与此消息中传递的对象完全相同。
【解决方案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 的回答中找到答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多