
圖片發自簡書App
在判斷一個字符串類型的變量是否與某字符時相等,你可能寫下這樣一行代碼
if (activityType == @"0"){} //activityType是某一個變量名
然后你會得到這樣一行黃色提醒
Fixing “direct comparison of a string literal has undefined behavior”
原因在於
==
:比較的是指針指向的地址,OC中的對象都是用指針表示的,但在這里並不能保證activityType
與0
相等
那么很自然可以想到使用用isEqual
或isEqualToString
方法,這兩者也是有區別的:
-
isEqual
:NSObject
方法,官方文檔是這樣寫的Returns a Boolean value that indicates whether the receiver and a given object are equal. 返回一個bool值判斷兩個對象是否相等
如果兩個對象是相等的,那么他們必須有相同的哈希值
-
isEqualToString
:NSString
方法,而NSString
是繼承自NSObject
的,所以isEqualToString
應該是isEqual
的衍生方法,是對isEqual
的細分,它的官方文檔是這樣寫的Returns a Boolean value that indicates whether a given string is equal to the receiver using a literal Unicode-based comparison. 返回一個bool值判斷給出的字符串是否與已有的Unicode字符相同
如果知道了兩個對象都是字符串,
isEqualToString
比isEqual
要快
所以以上代碼應該寫成
if (activityType isEqualToString @"0"){}
文/sealband(簡書作者)
原文鏈接:http://www.jianshu.com/p/2e70a7430362
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。
原文鏈接:http://www.jianshu.com/p/2e70a7430362
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。