Когда вы используете оператор ==
, вы сравниваете значения указателя. Это будет работать только тогда, когда объекты, которые вы сравниваете, являются одним и тем же объектом с одним и тем же адресом памяти. Например, этот код вернет These objects are different
, потому что, несмотря на то, что строки одинаковы, они хранятся в разных местах памяти:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
Когда вы сравниваете строки, вы обычно хотите сравнить текстовое содержимое строк, а не их указатели, поэтому вам следует использовать метод -isEqualToString:
из NSString
. Этот код вернет These strings are the same
, потому что он сравнивает значение строковых объектов, а не их значения указателя:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
Для сравнения произвольных объектов Objective-C следует использовать более общий метод isEqual:
из NSObject
. -isEqualToString:
— это оптимизированная версия -isEqual:
, которую следует использовать, когда вы знаете, что оба объекта являются объектами NSString
.
- (void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if([key isEqual:string])
{
//do some operation
}
}
}
person
Rob Keniger
schedule
19.02.2010