https://www.jianshu.com/p/526dfd5cbb19

2016.08.04 12:06* 字数 517 阅读 3504评论 3喜欢 3
  1. NSAssert是一个预处理宏, 他的主要作用就是可以让开发者比较便捷的捕获一个错误, 让程序崩溃, 同时报出错误提示

  2. 使用方法:

    • NSAssert(x != nil, @"错误提示")
    • 当你的程序在运行到这个宏时, 如果变量x的值为nil, 此时程序就会崩溃, 并且抛出一个异常, 异常提示就是你后面写的提示
  3. 一些注意点

    • 错误提示是可以使用中文的
    • NSAssert还有几个可以接收参数的宏
    • 如: NSAssert2(condition, desc, arg1, arg2)
    • 他的作用是可以让你的desc描述语句, 添加上参数, 让你的异常捕获更加精确
  4. 发布版本

    • NSAssert也是一个预处理指令, 如果使用过多, 也会影响你的程序运行, 这时我们要像在发布版本时处理NSLog一样处理这个预处理指令, 只不过他的处理方式有些不同

      1. 首先进入项目工程文件
      2. 选择Build Settings
      3. 搜索Perprocessor Macros
      4. 在Release中添加一个规则: NS_BLOCK_ASSERTIONS
      5. 这时当你的APP处于发布版本时, 这个预处理指令就会失效了
  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

转载于:https://www.cnblogs.com/sundaysgarden/p/10694321.html

NSAssert的使用相关推荐

  1. NSAssert和NSLog

    开发ios程序时调试的好帮手---NSAssert()函数.而且和NSLog()函数一样简单易用,代码如下:    NSAssert(x!=0,@"x must not be zero&qu ...

  2. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处

    iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处 参考文章: (1)iOS-----程序异常处理----- 断言NSAssert()和NS ...

  3. NSAssert和NSParameterAssert

    2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17 https://www.jianshu.com/p/3072e174554f NSAssert和NSParamete ...

  4. 断言NSAssert的使用

    NSAssert()的定义是 #define NSAssert(condition, desc) condition是条件表达式,值为yes或者no,在OC中规定0为假,非0就为真. desc为异常描 ...

  5. 什么是NSAssert?

    断言, 判断是否符合某个特定条件, 符合就继续运行程序, 反之就抛出异常, 后面为自定义错误提示, 也可以使用NSParameterAssert, 在调试上有着很大的方便 int a = 0; NSA ...

  6. NSAssert与assert断言

    调试cocoa程序在程序出错时,不会马上停止.使用宏NSAssert可以让程序出错时马上抛出异常. 在debug情况下,所有NSAssert都会被执行.在release下不希望NSAssert被执行, ...

  7. 更轻量的 View Controllers

    原文链接:http://objccn.io/issue-1-1/ View controllers 通常是 iOS 项目中最大的文件,并且它们包含了许多不必要的代码.所以 View controlle ...

  8. Swift学习总结【持续更新】

    1. try.try?.try!的区别: try:需要用catch捕捉异常,如: do {let data = try encoder.encode(item) try data.write(to: ...

  9. SRWebSocket源码浅析(上)

    2017-06-12 涂耀辉 Cocoa开发者社区 一. 前言: WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--可以通俗的解释为服 ...

最新文章

  1. 关闭vmware喇叭报警声
  2. Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
  3. 为树莓派安装远程桌面服务
  4. js将数组元素随机排序的方法
  5. indexes和indices的区别(下标)
  6. poj 1845 Sumdiv (算数基本定理+逆元)
  7. Tycoon:针对多种平台上的Java JIMAGE的勒索软件
  8. 静态成员函数与静态数据的使用
  9. v97fp5后, load问题诊断方法增强.
  10. python面向对象实现算术编码
  11. scanf 用法及陷阱(转)
  12. Win10提示文件或目录损坏怎么解决?
  13. 电磁干扰类型以及--电感和磁珠
  14. Ensemble查看基因的外显子信息,并根据染色体位点判断是第几号外显子
  15. EMC共模干扰处理,共模扼流圈的应用和选型。
  16. 数据结构测试题——树和二叉树(一)
  17. word2vec——训练自己的word2vec模型
  18. Moblin V2活动映像安装详解
  19. OKR测试试卷模板(0基础)
  20. RK3368 Recovery界面旋转方向调试

热门文章

  1. jquery对象和Dom对象的不同
  2. localStorage
  3. window 注册表五大类
  4. 数据库 ACCESS与SQL SERVER 2000分页SQL语句 分析
  5. 搭建微服务器:express+https+api代理
  6. 数据库及线程死锁(转)
  7. linux 防火墙iptables简明教程
  8. java实现Kafka生产者示例
  9. Entity Framework 实体框架的形成之旅--实体数据模型 (EDM)的处理(4)
  10. kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)