В методах 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.