NSAssert的使用
https://www.jianshu.com/p/526dfd5cbb19
NSAssert是一个预处理宏, 他的主要作用就是可以让开发者比较便捷的捕获一个错误, 让程序崩溃, 同时报出错误提示
使用方法:
NSAssert(x != nil, @"错误提示")
- 当你的程序在运行到这个宏时, 如果变量x的值为nil, 此时程序就会崩溃, 并且抛出一个异常, 异常提示就是你后面写的提示
一些注意点
- 错误提示是可以使用中文的
- NSAssert还有几个可以接收参数的宏
- 如:
NSAssert2(condition, desc, arg1, arg2)
- 他的作用是可以让你的desc描述语句, 添加上参数, 让你的异常捕获更加精确
发布版本
- NSAssert也是一个预处理指令, 如果使用过多, 也会影响你的程序运行, 这时我们要像在发布版本时处理NSLog一样处理这个预处理指令, 只不过他的处理方式有些不同
- 首先进入项目工程文件
- 选择Build Settings
- 搜索Perprocessor Macros
- 在Release中添加一个规则:
NS_BLOCK_ASSERTIONS
- 这时当你的APP处于发布版本时, 这个预处理指令就会失效了
- NSAssert也是一个预处理指令, 如果使用过多, 也会影响你的程序运行, 这时我们要像在发布版本时处理NSLog一样处理这个预处理指令, 只不过他的处理方式有些不同
使用效果如下
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的使用相关推荐
- NSAssert和NSLog
开发ios程序时调试的好帮手---NSAssert()函数.而且和NSLog()函数一样简单易用,代码如下: NSAssert(x!=0,@"x must not be zero&qu ...
- iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处 参考文章: (1)iOS-----程序异常处理----- 断言NSAssert()和NS ...
- NSAssert和NSParameterAssert
2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17 https://www.jianshu.com/p/3072e174554f NSAssert和NSParamete ...
- 断言NSAssert的使用
NSAssert()的定义是 #define NSAssert(condition, desc) condition是条件表达式,值为yes或者no,在OC中规定0为假,非0就为真. desc为异常描 ...
- 什么是NSAssert?
断言, 判断是否符合某个特定条件, 符合就继续运行程序, 反之就抛出异常, 后面为自定义错误提示, 也可以使用NSParameterAssert, 在调试上有着很大的方便 int a = 0; NSA ...
- NSAssert与assert断言
调试cocoa程序在程序出错时,不会马上停止.使用宏NSAssert可以让程序出错时马上抛出异常. 在debug情况下,所有NSAssert都会被执行.在release下不希望NSAssert被执行, ...
- 更轻量的 View Controllers
原文链接:http://objccn.io/issue-1-1/ View controllers 通常是 iOS 项目中最大的文件,并且它们包含了许多不必要的代码.所以 View controlle ...
- Swift学习总结【持续更新】
1. try.try?.try!的区别: try:需要用catch捕捉异常,如: do {let data = try encoder.encode(item) try data.write(to: ...
- SRWebSocket源码浅析(上)
2017-06-12 涂耀辉 Cocoa开发者社区 一. 前言: WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--可以通俗的解释为服 ...
最新文章
- 关闭vmware喇叭报警声
- Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
- 为树莓派安装远程桌面服务
- js将数组元素随机排序的方法
- indexes和indices的区别(下标)
- poj 1845 Sumdiv (算数基本定理+逆元)
- Tycoon:针对多种平台上的Java JIMAGE的勒索软件
- 静态成员函数与静态数据的使用
- v97fp5后, load问题诊断方法增强.
- python面向对象实现算术编码
- scanf 用法及陷阱(转)
- Win10提示文件或目录损坏怎么解决?
- 电磁干扰类型以及--电感和磁珠
- Ensemble查看基因的外显子信息,并根据染色体位点判断是第几号外显子
- EMC共模干扰处理,共模扼流圈的应用和选型。
- 数据结构测试题——树和二叉树(一)
- word2vec——训练自己的word2vec模型
- Moblin V2活动映像安装详解
- OKR测试试卷模板(0基础)
- RK3368 Recovery界面旋转方向调试