В методах NSMutableArray removeObject: vs removeObjectIdenticalTo: - PullRequest
14 голосов
/ 28 марта 2009

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

Формулировка в Справочнике по API выглядит очень похоже:

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

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

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

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

Ответы [ 2 ]

28 голосов
/ 28 марта 2009

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

Edit:

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

2 голосов
/ 09 января 2014

@ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...