方法簽名
- (BOOL)isEqual:(id)object; // NSObject 協議,通用相等判斷
- (BOOL)isEqualToString:(NSString *)aString; // NSString 專用,優化字符串比較
核心差異
| 特性 | isEqual: | isEqualToString: |
| 參數類型 | id(任意對象) | NSString*(強類型) |
| 類型檢查 | 運行時動態判斷 | 編譯期類型安全 |
| 性能 | 略慢(需類型判斷) | 更快(直接比較字符串內容) |
| Nil處理 | [nil isEqual:@\"str\"] → NO | [nil isEqualToString:@\"str\"] → NO(安全) |
最佳實踐
- 比較兩個NSString:優先用
isEqualToString:(語義明確、性能優、編譯檢查)。
- 比較未知類型對象:用
isEqual:(如NSDictionary鍵比較)。
- 避免
==:只比較指針地址,內容相同但不同對象返回NO。
示例
NSString *a = @\"hello\";
NSString *b = [NSString stringWithFormat:@\"%@\", @\"hello\"]; // 不同對象
BOOL r1 = (a == b); // NO
BOOL r2 = [a isEqual:b]; // YES
BOOL r3 = [a isEqualToString:b]; // YES (推薦)
進階:本地化比較
需按語言規則比較(如大小寫、變音符)時,使用:
[a compare:b options:NSCaseInsensitiveSearch range:NSMakeRange(0, a.length) locale:[NSLocale currentLocale]] == NSOrderedSame
- 上一篇文章: Win8.1頻繁提示高危漏洞需重啟:防火牆/安全中心設置排查
- 下一篇文章: Java身份證校驗程序在MyEclipse調試無輸出:邏輯條件順序導致合法樣本被誤判
Copyright ©
程式碼之家 All Rights Reserved