Khi bạn sử dụng toán tử ==
, bạn đang so sánh giá trị con trỏ. Điều này sẽ chỉ hoạt động khi các đối tượng bạn so sánh chính xác là cùng một đối tượng, tại cùng một địa chỉ bộ nhớ. Ví dụ, đoạn mã này sẽ trở lại These objects are different
vì mặc dù các dây là như nhau, chúng được lưu trữ tại các địa điểm khác nhau trong bộ nhớ:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
Khi bạn so sánh chuỗi, bạn thường muốn so sánh nội dung văn bản của chuỗi hơn con trỏ của chúng, vì vậy bạn nên sử dụng phương thức -isEqualToString:
của NSString
. Mã này sẽ trở These strings are the same
vì nó so sánh giá trị của các đối tượng chuỗi chứ không phải là giá trị con trỏ của họ:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
Để so sánh tùy ý Objective-C đối tượng bạn nên sử dụng phương pháp isEqual:
tổng quát hơn của NSObject
. -isEqualToString:
là phiên bản được tối ưu hóa của -isEqual:
mà bạn nên sử dụng khi bạn biết cả hai đối tượng là đối tượng 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
}
}
}
Nguồn
2010-02-19 03:27:13
tuyệt vời .. cảm ơn rất nhiều Rob .. nó đã hoạt động :) – suse