iOS-NSAssert/NSException的使用

NSAssert:又稱為斷言,它是一個宏,通過判斷條件表達式NSAssert(),判定是否屬于BUG,從而提醒開發(fā)者代碼中出現(xiàn)的不合理情況,同時可以自定義錯誤信息.
條件表達式如下,condition為判斷條件,當其中的條件不滿足時才拋出錯誤,(也就是condition返回NO的情況),desc就是錯誤信息,可以自己定義

NSAssert(condition, desc)

在寫無限輪播的代碼中,我有一個判斷圖片輪播的時間間隔是否合理,如果時間間隔<0.01s就判定為不合理,拋出異常,代碼如下

if (timer <= 0.01) {
        NSAssert(timer < 0.01, @"定時器時間間隔過短");
        return NO;
    }

控制臺打印如下,除了錯誤信息,還打印了錯誤的文件名和行號YPCycleView.m:164

/Users/peiyang/Desktop/PictureScroll/12-17-無限輪播/12-17-無限輪播/YPCycleView.m:164
2016-12-18 11:56:21.429 12-17-無限輪播[19020:653771] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '定時器時間間隔過短'

通過源碼我們能很快定義到對應(yīng)的關(guān)鍵字__FILE____LINE__,前者是打印文件名,后者是打印對應(yīng)的行號.
接下來我們來看看它在系統(tǒng)中的定義,在代碼中有一個NSAssertionHandler類,用來處理斷言的失敗情況,失敗情況出現(xiàn)時會傳遞一個字符串給NSAssertionHandler對象來描述失敗的原因懊缺。每個線程都有自己的NSAssertionHandler對象冒掌。當調(diào)用時,一個斷言處理器會打印包含方法和類(或函數(shù))的錯誤消息俺抽,并引發(fā)一個NSInternalInconsistencyException異常。

#if !defined(_NSAssertBody)
#define NSAssert(condition, desc, ...)  \
    do {                \
    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \
    if (!(condition)) {     \
            NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \
            __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \
        [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \
        object:self file:__assert_file__ \
            lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \
    }               \
        __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \
    } while(0)
#endif

在DEBUG模式下才會打印NSASSert的情況,在Release模式下是不會打印錯誤信息的.

NSException:

 NSException *excp = [NSException exceptionWithName:@"FileError" reason:@"笨蛋,文件不存在或者不是文件夾,請好好檢查" userInfo:nil];
        [excp raise];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子增淹,更是在濱河造成了極大的恐慌,老刑警劉巖舶衬,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠通,死亡現(xiàn)場離奇詭異,居然都是意外死亡逛犹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虽画,“玉大人舞蔽,你說我怎么就攤上這事÷胱” “怎么了渗柿?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脖岛。 經(jīng)常有香客問我朵栖,道長,這世上最難降的妖魔是什么柴梆? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任陨溅,我火速辦了婚禮,結(jié)果婚禮上绍在,老公的妹妹穿的比我還像新娘门扇。我一直安慰自己,他們只是感情好偿渡,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布臼寄。 她就那樣靜靜地躺著,像睡著了一般溜宽。 火紅的嫁衣襯著肌膚如雪吉拳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天适揉,我揣著相機與錄音合武,去河邊找鬼。 笑死涡扼,一個胖子當著我的面吹牛稼跳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吃沪,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汤善,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了票彪?” 一聲冷哼從身側(cè)響起红淡,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎降铸,沒想到半個月后在旱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡推掸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年桶蝎,在試婚紗的時候發(fā)現(xiàn)自己被綠了驻仅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪服,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胜茧,到底是詐尸還是另有隱情粘优,我是刑警寧澤呻顽,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站廊遍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昧碉。R本人自食惡果不足惜英染,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一被饿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狭握,春花似錦闪金、人聲如沸论颅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漏设。三九已至今妄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盾鳞,已是汗流浹背犬性。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工腾仅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人推励。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓肉迫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惰蜜。 傳聞我的和親對象是個殘疾皇子受神,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理抛猖,服務(wù)發(fā)現(xiàn)鼻听,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 一直想寫一篇你關(guān)于斷言的文章, 今天有時間趕緊寫出來.參考 Mattt 文章 一撑碴、Objective - C 中的...
    Mitchell閱讀 11,063評論 1 24
  • 1. SAML斷言 斷言是一個包含零個或更多個由SAML權(quán)威做出的聲明的信息包。 SAML斷言通常與由 元素表示的...
    WebSSO閱讀 1,412評論 0 1
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,161評論 2 33
  • 就目前的的理解來看醉拓,spu和sku沒有實質(zhì)界限。完全根據(jù)產(chǎn)品的細膩度來劃分亿卤。有這么個概念還是有助于設(shè)計數(shù)據(jù)庫吧愤兵。
    離子來了閱讀 667評論 0 2