iOS断言

来自:http://my.oschina.net/panyong/blog/205573

在看到xmpp项目中的一些代码时,看到如下,不懂该代码是啥意思, 
如下: 
NSAssert(_xmppStream == nil, @“XMPPStream被重复实例化!“);

一查,其实很简单:就是一个断言而已 
在网上很多blog讲的很详细,在这里,仅记录一下自己代码中断言的作用!

断言!再此程序断言:_xmppStream必须是nil,如果不是nil,程序强行中断! 
要求调用方,必须自觉自律,要求是唯一的,你就应该是唯一的。 
断言针对程序的核心代码区,有重要的保护作用 
要求在开发过程中,就能够及时的发现错误,而不是去频繁的修改核心代码!

来自: http://blog.sina.com.cn/s/blog_75992b660101kbj2.html

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

#define NSAssert(condition, desc)

condition是条件表达式,值为YES或NO;desc为异常描述,通常为NSString。当conditon为YES时程序继续运行,为NO时,则抛出带有desc描述的异常信息。NSAssert()可以出现在程序的任何一个位置。具体事例如下:

生成一个LotteryEntry对象时,传入的NSDate不能为nil,加入NSAssert()判断。对象初始化源码如下:

- (id)initWithEntryDate:(NSDate *)theDate {

self = [super init];

if (self) {

NSAssert(theDate != nil, @"Argument must be non-nil");

entryDate = theDate;

firstNumber = (int)random() % 100 + 1;

secondNumber = (int)random() % 100 + 1;

}

return  self;

}

接下来则是生成对象时传入一个值为nil的NSDate,看断言是否运行。

LotteryEntry *nilEntry = [[LotteryEntry alloc] initWithEntryDate:nil];

断言效果如下:

2013-01-17 20:49:12.486 lottery[3951:303] *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException‘, reason: ‘Argument must be non-nil‘

*** First throw call stack:

(

0   CoreFoundation                      0x00007fff90c590a6 __exceptionPreprocess + 198

1   libobjc.A.dylib                     0x00007fff8fd2a3f0 objc_exception_throw + 43

2   CoreFoundation                      0x00007fff90c58ee8 +[NSException raise:format:arguments:] + 104

3   Foundation                          0x00007fff88dae6a2 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189

4   lottery                             0x0000000100001929 -[LotteryEntry initWithEntryDate:] + 249

5   lottery                             0x0000000100001794 main + 932

6   libdyld.dylib                       0x00007fff8d83f7e1 start + 0

)

libc++abi.dylib: terminate called throwing an exception

时间: 2024-10-12 14:23:56

iOS断言的相关文章

iOS - 断言处理与调试

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

iOS 断言的运用

NSAssert的使用 苹果在foundation.framework中定义了这么一个宏: #define NSAssert(condition, desc, ...) 第一个参数为一个条件判断,如果为假,则抛出异常,显示第二个参数所描述的信息. 例如 NSAssert(1>=2, @"1>=2 is false!"); 在debug模式下运行,会终止程序,并抛出如下异常: 2015-11-18 10:23:16.618 TestAssertion[825:c07] ***

ios之断言更胜于NSLog

有时候我们需要不断的输出以用来调试程序,断言这个东西很少被人用到.今天看网上一大神写的代码 NSAssert(!gMenu, @"singleton object"); NSParameterAssert(view); 便查了下文档 #define NSParameterAssert(condition) NSAssert((condition), @"Invalid parameter not satisfying: %s", #condition) #if !d

【iOS】Swift中的函数、断言、枚举等

函数与方法.枚举等的书写格式与用法较OC还是变化很大的. 一.函数 1.1 无返回值, 无形参 func myTest2(){ println("Hello") } 1.2 有返回值,有形参 func myTest1( num1:Int , num2:Int ) -> String{ return String(num1 + num2) } 1.3 外部参数. (相当于给参数起了个别名,方便识别记忆) func myTest3 (myNum1 num1 :Int ,myNum2

iOS单元测试

图前内容转载自:slegetank 开始之前 本文侧重讲述如何在iOS程序的开发过程中使用单元测试.使用Xcode自带的OCUnit作为测试框架. 一.单元测试概述 单 元测试作为敏捷开发实践的组成之一,其目的是提高软件开发的效率,维持代码的健康性.其目标是证明软件能够正常运行,而不是发现bug(发现 bug这一目的与开发成本是正相关的,虽然发现bug是保证软件质量的一种手段,但是很显然这与降低软件开发成本这一目的背道而驰).它是对软件质量的一 种保证,例如重构之后我们需要保证软件产品的正常运行

IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母

今天在项目中需要用到判断用户输入的用户名长度为8-16位且同时包含数字和字母,在网上搜了一下正则表达式的用法,然后参考这篇blog,完美解答了问题.记录一下: 密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间. 如何分析需求?拆分!这就是软件设计的一般思路了.于是乎,拆分需求如下: 1,不能全部是数字 2,不能全部是字母 3,必须是数字或字母 只要能同时满足上面3个要求就可以了,写出来如下: 1 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-

Google推出iOS功能性UI测试框架EarlGrey

经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google Translate.Google Play Music等多款Google应用都成功地采用了EarlGrey框架来满足其功能性测试之所需. EarlGre的特点 EarlGrey所提供的主要特性如下所示,这些特性使得应用的测试变得更加轻松,也更具效率: 强大的内建同步机制:测试会在与UI进行交互前自动

ios测试工具研究(1)-----------XCTest 单元测试

上了软件测试这门课以后开始动手实践软件测试的方法,由于个人更偏重于ios开发,于是开始对ios平台的软件测试技术进行研究 苹果在2014年在自身开发工具xcode上集成了新的单元测试工具XCTest. 一.先来谈谈什么是单元测试 单元测试指的是在对程序最基本的单元,例如一个函数.菜单.界面等最小可执行单元进行测试的过程. 个人理解多做单元测试可以保证程序的健壮性,而且能养成防御性编程的好习惯 二.XCTest框架 1.整体看怎么用它 用法很简单,说白了 就是实现一个XCTest的子类就可以 例如

iOS 开发者必不可少的75个工具

原文出处: Ben Scheirman 译文出处: Njuxjy 如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具不断研究,同时了解一些替代品的使用,当你目前所用的工具无法满足你的需要时可以填补空缺. 记住了这些,我将向你展示一份关于各种工具的长长的列表.其中一些我每天都用,其他的我看情况使用.如果你还有更多的工具想展示在这个列表里,可以跟我留言哦亲