NSAssert NSCAssert NSParameterAssert

@这里给介绍几个系统给我们,很方便进行程序调试,定位错误的宏

我们写程序时,对于不放心或容易报错的地方,可以加上这个代码

#define NSAssert(condition, desc, ...)
#define NSCAssert(condition, desc, ...)
第一个参数为一个条件判断,如果为假,则抛出异常,显示第二个参数所描述的信息(定义为自己能看的很明白的错误提示信息)。

例如:
    NSString *test = @"HMT";
    NSAssert([test isEqualToString:@"TMH"], @"your name is error");
    NSCAssert([test isEqualToString:@"TMH"], @"your name is error");

1.在debug模式下运行,会终止程序,并抛出如下异常:
2014-09-11 18:26:02.008 DemoTest[42915:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'your name is error'
2.在release模式下运行,不终止程序不抛出异常。

@小心使用NSAssert,可以看到它的定义中出现了一个self,有可能在你的block中你会发现你明明没有self的strong引用,但是仍然出现了循环引用。就看看你是否使用了NSAssert,这个宏被展开之后持有了self,那么有可能就会出现引用不释放的问题。
而使用NSCassert,就不会有这样的问题了。因为它定义使用的handleFailureInFunction函数,并没有self引用。

#define NSParameterAssert(condition)
    程序在相应位置设定的条件不满足的时候抛出来,用NSParameterAssert让程序crash到相应位置:
2014-09-11 18:26:43.524 DemoTest[42982:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: [test isEqualToString:@"TMH"]'
时间: 2024-10-16 13:09:34

NSAssert NSCAssert NSParameterAssert的相关文章

NSAssert和NSParameterAssert

2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17 https://www.jianshu.com/p/3072e174554f NSAssert和NSParameterAssert在开发环境中经常被使用,调试和验证代码参数的完整性,断言为真,则表明程序运行正常,而断言为假,则意味着它已经在代码中发现了意料之外的错误.xCode中的断言在Debug模式默认是开启的,Realse版本中是禁用的. 基础断言 基础类库中了两种断言,NSAssert和NSParamete

NSAssert,NSCassert

在苹果的SDK中可以看到这两个都是定义的宏 NSAssert 的定义如下: #define NSAssert(condition, desc, ...) do { __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS if (!(condition)) { [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd object:self file:[NSString stringWithUTF8String:

使用NSAssert()和NSParameterAssert调试程序

NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并切可以自定义异常描述.NSAssert()是这样定义的: #define NSAssert(condition, desc) condition是条件表达式,值为YES或NO:desc为异常描述,通常为NSString.当conditon为YES时程序继续运行,为NO时,则抛出带有desc描述

iOS - 断言处理与调试

一.Objective - C 中的断言: Objective - C 中的断言处理使用的是 NSAssertionHandler : 每个线程拥有它自己的断言处理器,它是 NSAssertionHandler 类的实例对象.当被调用时,一个断言处理器打印一条包含方法和类名(或者函数名)的错误信息.然后它抛出一个 NSInternalInconsistencyException 异常. 基础类中定义了两套断言宏 NSAssert / NSCAssert /** NSAssert */ #if !

断言NSAssert的使用

1. NSAssert 断言(NSAssert)是一个宏,在开发过程中使用NSAssert可以及时发现程序中的问题. NSAssert声明如下: #define NSAssert(condition, desc, ...) condition:条件表达式.条件成立时,运行后面程序:不成立时,抛出带有desc描述的异常信息. desc:异常描述,通常为NSString类型对象.用于描述条件表达式不成立的错误信息和参数的占位符. ...:desc字符串中的参数. 假设我们需要判断变量值是否大于5,我

小心一些,断言可能让你的造成循环引用NSAssert

block和self的相互引用造成的循环引用,想必大家都是明白的.上下面的代码(截取部分) __weak typeof(self) weakSelf = self; self.jsBridgeFunctionDic = @{ JSBridgeCallNativePage: ^(NSDictionary *data){ NSLog(@"JSBridgeCallNativePage"); NSDictionary *params = [data dictionaryForKey:@&quo

NSAssert详解

NSAssert是foundation.framework中定义的一个宏:#define NSAssert(condition, desc, ...)第一个参数为一个条件判断,如果为假,则抛出异常,显示第二个参数所描述的信息. 例如:NSAssert(2>=3, @"2>=3 is false!");在debug模式下运行,会终止程序,并抛出如下异常:2013-04-24 09:24:16.618 TestAssertion[825:c07] *** Terminating

IOS中调试的辅助宏 NSAssert

NSAssert函数: 1 NSAssert(condition, desc, ...); 1. condition:条件,如果条件满足则程序正常之行,如果条件不满足则程序崩溃,奔溃的信息可以由后面的desc来打印出来: 实例如下: NSInteger age = 10; NSAssert(age == 01, @"the condition is not right -%s--%s---%d",__FILE__,__FUNCTION__,__LINE__); 这时打印出来的信息为:

NSAssert使用

断言使用:断言的第一个参数为NO时,程序执行到这里时就会崩溃并原文打印第二个参数. @implementation People - (void)eat{    BOOL isB = NO;    if (3 > 4)    {        isB = YES;     }    NSAssert(isB == YES, @"要崩溃了");//断言的第一个参数为NO时,程序执行到这里时就会崩溃并原文打印第二个参数.} @end