圖片發自簡書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
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。
