iOS開發(fā)陷阱之NSString?-compare

iOS開發(fā)陷阱之NSString - compare

NSString有多個(gè)compare相關(guān)方法:

-(NSComparisonResult)compare:(NSString *)string;

-(NSComparisonResult)compare:(NSString *)stringoptions:(NSStringCompareOptions)mask;

-(NSComparisonResult)compare:(NSString *)stringoptions:(NSStringCompareOptions)maskrange:(NSRange)compareRange;

-(NSComparisonResult)compare:(NSString *)stringoptions:(NSStringCompareOptions)mask range:(NSRange)compareRangelocale:(id)locale;

NSComparisonResult 是定義的一個(gè)枚舉,定義如下:

typedefNS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L,NSOrderedSame, NSOrderedDescending};

其中,NSOrderedSame 表示比較的兩個(gè)字符串完全一致, 同時(shí)摹恰,在這個(gè)枚舉中捅位,它的值是 0.

字符串比較在程序中很常見,比如:

if ([str1compare:@"some text"] == NSOrderedSame) {

// Do something

}

else {

// Do something else

}

但杆查,如果如上中的str1為nil扮惦,根據(jù)Objective-C的消息調(diào)用規(guī)則(方法調(diào)用),對nil發(fā)送的任何消息亲桦,得到的返回都是nil崖蜜。這樣的情況下,運(yùn)行時(shí)是不會像C/C++那樣客峭,出現(xiàn)空指針的非法訪問而使得程序強(qiáng)行終止豫领。也就是說,在Objective-C下面舔琅,即便str1為nil等恐,也不會造成程序崩潰,而是會繼續(xù)運(yùn)行。

那么當(dāng)str1為空的時(shí)候课蔬,[str1 compare:@"some text"]消息的返回就會為nil囱稽。nil表示一個(gè)空的Objective-C對象,實(shí)際就是表示一個(gè)空指針二跋,而它代表的值就是0战惊,與NSOrderedSame的值相等.如此,回到最前面的if語句扎即,如果str1為nil吞获,那么整個(gè)語句的值為真。這會給程序造成非常嚴(yán)重的問題谚鄙,小則邏輯錯(cuò)誤各拷,UI顯示錯(cuò)誤等,大則會造成數(shù)據(jù)泄漏等等襟锐。撤逢。。所以粮坞,一旦出現(xiàn)這種情況蚊荣,還是很嚴(yán)重的。

筆者個(gè)人建議莫杈,以上代碼至少應(yīng)該寫為:

if (str1!=nil && [str1 compare:@"some text"] ==NSOrderedSame) {

// Do something

}

else {

// Do something else

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互例,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筝闹,更是在濱河造成了極大的恐慌媳叨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件关顷,死亡現(xiàn)場離奇詭異糊秆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)议双,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門痘番,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人平痰,你說我怎么就攤上這事汞舱。” “怎么了宗雇?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵昂芜,是天一觀的道長。 經(jīng)常有香客問我赔蒲,道長泌神,這世上最難降的妖魔是什么良漱? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮腻扇,結(jié)果婚禮上债热,老公的妹妹穿的比我還像新娘。我一直安慰自己幼苛,他們只是感情好窒篱,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舶沿,像睡著了一般墙杯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上括荡,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天高镐,我揣著相機(jī)與錄音,去河邊找鬼畸冲。 笑死嫉髓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邑闲。 我是一名探鬼主播算行,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苫耸!你這毒婦竟也來了州邢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤褪子,失蹤者是張志新(化名)和其女友劉穎量淌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫌褪,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呀枢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笼痛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硫狞。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晃痴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情财忽,我是刑警寧澤倘核,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站即彪,受9級特大地震影響紧唱,放射性物質(zhì)發(fā)生泄漏活尊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一漏益、第九天 我趴在偏房一處隱蔽的房頂上張望蛹锰。 院中可真熱鬧,春花似錦绰疤、人聲如沸铜犬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癣猾。三九已至,卻和暖如春余爆,著一層夾襖步出監(jiān)牢的瞬間纷宇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工蛾方, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留像捶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓桩砰,卻偏偏與公主長得像拓春,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子五芝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容