一些第三方的框架中,經(jīng)嘲踩看見(jiàn)上述4個(gè)關(guān)鍵詞墩崩,大概知道是蘋(píng)果定義的宏,但不知道具體的用法侯勉,更不知道怎么在實(shí)際中去合理的應(yīng)用到到上述4個(gè)宏鹦筹。所以有必要解釋一下這4個(gè)宏的作用:
?#define NSAssert(condition, desc)
? ? ? ? NSAssert()是定義的一個(gè)斷言宏,用于開(kāi)發(fā)階段調(diào)試程序中的Bug址貌,通過(guò)為NSAssert()傳遞條件表達(dá)式來(lái)斷定是否屬于Bug铐拐,滿(mǎn)足條件返回真值,程序繼續(xù)運(yùn)行练对,如果返回假值遍蟋,則拋出異常,并且可以自定義異常描述螟凭。condition是條件表達(dá)式虚青,值為YES或NO;desc為異常描述螺男,通常為NSString棒厘。當(dāng)conditon為YES時(shí)程序繼續(xù)運(yùn)行纵穿,為NO時(shí),則拋出帶有desc描述的異常信息奢人。NSAssert()可以出現(xiàn)在程序的任何一個(gè)位置谓媒。
?NSAssert/NSCAssert 宏定義的區(qū)別
[[NSAssertionHandler currentHandler] handleFailureInMethod : _cmd object : self file:[NSString stringWithUTF8String:__FILE__] lineNumber:__LINE__ description:(desc), ##__VA_ARGS__];}
[[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithUTF8String: __PRETTY_FUNCTION__ ] file : [NSString stringWithUTF8String: __FILE__] lineNumber:__LINE__ description:(desc), ##__VA_ARGS__] ; }
? ? ? ?從定義可以看出來(lái),前者是適合于ObjectC的方法何乎,_cmd 和 self 與運(yùn)行時(shí)有關(guān). 后者是適用于C的函數(shù)句惯。NSParameterAssert / NSCparameterAssert 兩者的區(qū)別也是前者適用于Objective-C的方法,后者適用于C的函數(shù)。實(shí)際開(kāi)發(fā)中就用前者就可以了支救。
NSAssert/NSCAssert 和 NSParameterAssert / NSCparameterAssert ?的區(qū)別是前者是對(duì)條件斷言, 后者只是對(duì)參數(shù)是否存在的斷言:
NSAssert的用法:
運(yùn)行則會(huì)崩潰并在控制臺(tái)輸出信息如下:
NSParameterAssert的用法:
多少行出錯(cuò)宗弯,什么原因出的錯(cuò),日志說(shuō)的很清楚搂妻。