一. NSAssert的使用

  1. NSAssert是一個預處理宏, 他的主要作用就是可以讓開發(fā)者比較便捷的捕獲一個錯誤, 讓程序崩潰, 同時報出錯誤提示

  2. 使用方法:

    • NSAssert(x != nil, @"錯誤提示")
    • 當你的程序在運行到這個宏時, 如果變量x的值為nil, 此時程序就會崩潰, 并且拋出一個異常, 異常提示就是你后面寫的提示
  3. 一些注意點

    • 錯誤提示是可以使用中文的
    • NSAssert還有幾個可以接收參數(shù)的宏
    • 如: NSAssert2(condition, desc, arg1, arg2)
    • 他的作用是可以讓你的desc描述語句, 添加上參數(shù), 讓你的異常捕獲更加精確
  4. 發(fā)布版本

    • NSAssert也是一個預處理指令, 如果使用過多, 也會影響你的程序運行, 這時我們要像在發(fā)布版本時處理NSLog一樣處理這個預處理指令, 只不過他的處理方式有些不同
      1. 首先進入項目工程文件
      2. 選擇Build Settings
      3. 搜索Perprocessor Macros
      4. 在Release中添加一個規(guī)則: NS_BLOCK_ASSERTIONS
      5. 這時當你的APP處于發(fā)布版本時, 這個預處理指令就會失效了
  5. 使用效果如下

     2016-08-04 11:58:55.225 NSAssert[4215:68280] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '提示10, 20'
     *** First throw call stack:
     (
         0   CoreFoundation                      0x000000010c0fce65 __exceptionPreprocess + 165
         1   libobjc.A.dylib                     0x000000010bb75deb objc_exception_throw + 48
         2   CoreFoundation                      0x000000010c0fccca +[NSException raise:format:arguments:] + 106
         3   Foundation                          0x000000010b7c24de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
         4   NSAssert                            0x000000010b6777f0 -[ViewController viewDidLoad] + 336
         5   UIKit                               0x000000010c63ff98 -[UIViewController loadViewIfRequired] + 1198
         6   UIKit                               0x000000010c6402e7 -[UIViewController view] + 27
         7   UIKit                               0x000000010c516ab0 -[UIWindow addRootViewControllerViewIfPossible] + 61
         8   UIKit                               0x000000010c517199 -[UIWindow _setHidden:forced:] + 282
         9   UIKit                               0x0000000119d4c831 -[UIWindowAccessibility _orderFrontWithoutMakingKey] + 68
         10  UIKit                               0x000000010c528c2e -[UIWindow makeKeyAndVisible] + 42
         11  UIKit                               0x000000010c4a1663 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4131
         12  UIKit                               0x000000010c4a7cc6 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1760
         13  UIKit                               0x000000010c4a4e7b -[UIApplication workspaceDidEndTransaction:] + 188
         14  FrontBoardServices                  0x000000010ee75754 -[FBSSerialQueue _performNext] + 192
         15  FrontBoardServices                  0x000000010ee75ac2 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
         16  CoreFoundation                      0x000000010c028a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
         17  CoreFoundation                      0x000000010c01e95c __CFRunLoopDoSources0 + 556
         18  CoreFoundation                      0x000000010c01de13 __CFRunLoopRun + 867
         19  CoreFoundation                      0x000000010c01d828 CFRunLoopRunSpecific + 488
         20  UIKit                               0x000000010c4a47cd -[UIApplication _run] + 402
         21  UIKit                               0x000000010c4a9610 UIApplicationMain + 171
         22  NSAssert                            0x000000010b677b3f main + 111
         23  libdyld.dylib                       0x000000010e83892d start + 1
         24  ???                                 0x0000000000000001 0x0 + 1
     )
     libc++abi.dylib: terminating with uncaught exception of type NSException
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容