使用斷言NSAssert()調(diào)試程序錯(cuò)誤

NSAssert()只是一個(gè)宏,用于開發(fā)階段調(diào)試程序中的Bug,通過為NSAssert()傳遞條件表達(dá)式來(lái)斷定是否屬于Bug,滿足條件返回真值,程序繼續(xù)運(yùn)行,如果返回假值,則拋出異常,并且可以自定義異常描述。NSAssert()是這樣定義的:

#define NSAssert(condition, desc)

condition是條件表達(dá)式,值為YES或NO;desc為異常描述,通常為NSString。當(dāng)conditon為YES時(shí)程序繼續(xù)運(yùn)行,為NO時(shí),則拋出帶有desc描述的異常信息。NSAssert()可以出現(xiàn)在程序的任何一個(gè)位置。具體事例如下:

生成一個(gè)LotteryEntry對(duì)象時(shí),傳入的NSDate不能為nil,加入NSAssert()判斷。對(duì)象初始化源碼如下:

- (id)initWithEntryDate:(NSDate *)theDate {

self = [super init];

if (self) {

NSAssert(theDate != nil, @"Argument must be non-nil");

entryDate = theDate;

firstNumber = (int)random() % 100 + 1;

secondNumber = (int)random() % 100 + 1;

}

return? self;

}

接下來(lái)則是生成對(duì)象時(shí)傳入一個(gè)值為nil的NSDate,看斷言是否運(yùn)行。

LotteryEntry *nilEntry = [[LotteryEntry alloc] initWithEntryDate:nil];

斷言效果如下:

2013-01-17 20:49:12.486 lottery[3951:303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Argument must be non-nil'

*** First throw call stack:

(

0? CoreFoundation? ? ? ? ? ? ? ? ? ? ? 0x00007fff90c590a6 __exceptionPreprocess + 198

1? libobjc.A.dylib? ? ? ? ? ? ? ? ? ? 0x00007fff8fd2a3f0 objc_exception_throw + 43

2? CoreFoundation? ? ? ? ? ? ? ? ? ? ? 0x00007fff90c58ee8 +[NSException raise:format:arguments:] + 104

3? Foundation? ? ? ? ? ? ? ? ? ? ? ? ? 0x00007fff88dae6a2 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189

4? lottery? ? ? ? ? ? ? ? ? ? ? ? ? ? 0x0000000100001929 -[LotteryEntry initWithEntryDate:] + 249

5? lottery? ? ? ? ? ? ? ? ? ? ? ? ? ? 0x0000000100001794 main + 932

6? libdyld.dylib? ? ? ? ? ? ? ? ? ? ? 0x00007fff8d83f7e1 start + 0

)

libc++abi.dylib: terminate called throwing an exception

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NSAssert()只是一個(gè)宏,用于開發(fā)階段調(diào)試程序中的Bug,通過為NSAssert()傳遞條件表達(dá)式來(lái)斷定是否...
    細(xì)雨聽風(fēng)閱讀 289評(píng)論 0 1
  • NSAssert()只是一個(gè)宏,用于開發(fā)階段調(diào)試程序中的Bug,通過為NSAssert()傳遞條件表達(dá)式來(lái)斷定是否...
    Isy閱讀 630評(píng)論 0 0
  • 今天在寫代碼的時(shí)候看別人寫的代碼 看到了他們寫了 NSAssert(self.dataSource,@"BHBCe...
    CoderSJun閱讀 947評(píng)論 0 0
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來(lái)源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,734評(píng)論 2 6
  • NSAssert是一個(gè)預(yù)處理宏, 他的主要作用就是可以讓開發(fā)者比較便捷的捕獲一個(gè)錯(cuò)誤, 讓程序崩潰, 同時(shí)報(bào)出錯(cuò)誤...
    面糊閱讀 8,624評(píng)論 3 53

友情鏈接更多精彩內(nèi)容