我在這裏看到了一些關於SO的問題,其中包括功能isEqual:
而不是標準==
。你應該使用'isEqual'還是'=='?
到目前爲止,我只學會了使用==
,所以我想知道什麼更好用,每個的優缺點是什麼?你應該什麼時候使用它們?
謝謝。
我在這裏看到了一些關於SO的問題,其中包括功能isEqual:
而不是標準==
。你應該使用'isEqual'還是'=='?
到目前爲止,我只學會了使用==
,所以我想知道什麼更好用,每個的優缺點是什麼?你應該什麼時候使用它們?
謝謝。
他們做不同的事情;所以你需要使用適當的一個:
考慮,如果你會:
NSString *a = @"Hello!";
NSString *b = a;
NSString *c = [a mutableCopy];
if (a == b) NSLog(@"This prints");
if (b == c) NSLog(@"This doesn't");
if ([a isEqual:c]) NSLog(@"This does");
換句話說; ==
只是檢查兩個指針是否指向同一個地方,因此是同一個對象; isEqual:
檢查兩個對象是否相等;在這種情況下,a
和b
是相同的字符串,而c
是一個等於a
的新字符串,因爲它具有相同順序的相同字符;但它有不同的課程和不同的地址。
對於對象,您幾乎總是希望使用isEqual:
,如果它們具有相同的類,則會使用更具體的比較器(例如,isEqualToString:
)。
==
另一方面,你應該只能用於整型數據類型。 (他們爲對象沒有多大意義,而較少爲浮點數。)
將的isEqual根據用於接收器對象
==寫入的方法比較對象比較對象(或它們的值對C的地址鍵入像整數
這意味着,比方說NSString的變量==比較地址,但isEquals:會看字符串對象的值,因此有類似的功能到strcmp
注意,許多字符串實習,使他們地址是相同的,如果他們的數據是相同的,所以==可以出現在測試用例中工作。
小心,'[副本]'可能會返回相同的對象,因爲它是不可變的字符串。 – dreamlax 2010-09-18 10:25:23
dreamlax:對,爲了清晰起見,更新了答案;我相信複製一個NSConstStr會產生一個NSConcreteImmutableString;我可能錯了。 – 2010-09-18 11:10:35
@ Williham Totland:將副本發送到一個常量字符串只是給你相同的指針。 – JeremyP 2010-09-18 12:36:46