В методах NSMutableArray removeObject: vs removeObjectIdenticalTo:

Что касается NSMutableArray, в чем разница между removeObject: и removeObjectIdenticalTo:

Текст в API Reference кажется очень похожим:

rO: удаляет все вхождения в приемник данного объекта

rOIT: удаляет все вхождения заданный объект в приемнике

Что мне не хватает?

ОБНОВЛЕНИЕ: Я имею в виду, как бы я выбрал между ними.

Ответы

Ответ 1

removeObjectIdenticalTo: удалит объект, на который указывает, removeObject: будет запускать isEqual: для всех элементов массива и удалять его, если он возвращает true.

Edit:

Вы должны использовать removeObjectIdenticalTo:, если знаете, что у вас есть один и тот же объект (например, для NSViews или аналогичный) и removeObject: для строк и объектов, где он может быть не одного и того же объекта, но для практических целей его следует считать равным.

Ответ 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: Это просто пример. U может найти ответ в ответе @cobbal.