IOS 使用NSAssert()和NSParameterAssert调试程序

IOS 使用NSAssert()和NSParameterAssert调试程序

NSAssert:

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

#define NSAssert(condition, desc)

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

 下面介绍NSParameterAssert

  断言评估一个条件,如果条件为 false ,调用当前线程的断点句柄。每一个线程有它自已的断点句柄,它是一个 NSAsserttionHandler 类的对象。当被调用时,断言句柄打印一个错误信息,该条信息中包含了方法名、类名或函数名。然后,它就抛出一个 NSInternalInconsistencyException 异常。

Assertions evaluate a condition and, if the condition evaluates to false,
call the assertion handler for the current thread, passing it a format
string and a variable number of arguments. Each thread has its own assertion handler,
which is an object of classNSAssertionHandler. When invoked, an assertion
handler prints an error message that includes method and class names (or the function name).
It then raises anNSInternalInconsistencyException exception.

  这个宏用于确认一个 Objective-C 的方法的有效性。简单提供参数作为条件就行。该宏评估这个参数,如果为 false ,它就打印一个错误日志信息,该信息包含了参数并且抛出一个异常。

This macro validates a parameter for an Objective-C method. Simply provide the
 parameter as the condition argument. The macro evaluates the parameter and,
if it is false, it logs an error message that includes the parameter and then raises an exception.

  如果定义了预处理宏 NS_BLOCK_ASSERTIONS 断言就被禁止了。所有的断点宏都返回 void。

Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined.
All assertion macros return void.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • IOS中UIWebView、WKWebView之JS交互

    做客户端开发,肯定避免不了JS交互,于是自己对苹果接口做了个简易封装: JSExport-->UIWebView+Interaction.WKScriptMessageHandler -->WKWebView+Interaction以备以后使用. 代码非常简洁,见这里:https://github.com/V5zhou/JSInteraction.git 旧方式 旧的交互方式有通过UIWebViewDelegate实现的:JS与客户端定义好跳转页面参数,在将要跳转时捕获关键字,然后处理业务.

  • iOS My97DatePicker日历使用详解

    一.效果图 二.工程图 三.代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController @end RootViewController.m #import "RootViewController.h" //加入头文件 #import "My97DatePicker.h" @interface RootViewControl

  • iOS中常见正则表达式验证方法

    在某些App应用里面需要填写用户信息(用于验证),有身份证.手机号.军官证等等.下面来跟大家分享一下各自的验证方式. 1.验证 手机号码 ,这个是对任意输入的一串数字做验证,返回一个识别结果(字符串),根据这个结果再做判断. //判断手机号码 + (NSString *)valiMobile:(NSString *)mobile{ if (mobile.length != 11){ return @"手机号码格式错误"; }else{ /** * 移动号段正则表达式 */ NSStri

  • Android中实现iOS中的毛玻璃效果

    为了实现毛玻璃效果,我们需要一组compute kernels(.rs文件中编写),及一组用于控制renderScript相关的Javaapi(.rs文件自动生成为Java类). 由于compute kernels的编写需要一定的学习成本,从JELLY_BEAN_MR1开始,Androied内置了一些compute kernels用于常用的操作,其中就包括了Gaussian blur. 下面,通过实操来讲解一下RenderScript来实现高斯模糊,最终实现效果(讲文字背景进行模糊处理): 实现

  • vue使用Axios做ajax请求详解

    vue2.0之后,就不再对vue-resource更新,而是推荐使用axios 1. 安装 axios $ npm install axios 或 $ bower install axios 2. 在要使用的文件中引入axios import axios from 'axios' 3. 使用axios做请求 可以通过向 axios 传递相关配置来创建请求, 只有 url 是必需的.如果没有指定 method,请求将默认使用 get 方法. { // `url` 是用于请求的服务器 URL url

  • IOS 开发UITextView回收或关闭键盘

    IOS 开发UITextView回收或关闭键盘 iOS开发中,发现UITextView没有像UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView关闭键盘,就必须使用其他的方法,下面是可以使用的几种方法. 1.如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate. - (void)textViewDidBeginEditing:(UITextView *)textVie

  • IOS 获取网络图片大小实例详解

    IOS 获取网络图片大小实例详解 在iOS开发过程中经常需要通过网络请求加载图片,有时,需要在创建UIImageView或UIButton来显示图片之前需要提前知道图片的尺寸,根据图片尺寸创建对应大小的控件.但是对于网络图片来说,要想通过最优的方法获得尺寸就略微有点困难,大体思路就是下面这种: 如果有使用SDWebImage,则首先检查是否缓存过该图片,如果没有,先通过文件头获取图片大小(针对格式为png.gif.jpg文件获取其尺寸大小),如果获取失败,则下载完整的图片data,然后计算大小,

  • IOS 中两种单例模式的写法实例详解

    iOS的单例模式有两种官方写法,如下: (1)不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWithZone:NULL] init]; return default

  • IOS 使用NSAssert()和NSParameterAssert调试程序

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

  • XCODE Debug模式资料整理

     在iOS开发中, 大多时候需要在debug 模式下调试,这里就整理下Debug 的知识  1,Debug和Release版本区别? 众所周知,我们进行iOS开发,在Xcode调试程序时,分为两种方式, Debug 和 Release ,在Target的Setting中相信大家应该看到很多选项都分为 Debug 和 Release ,方便我们分别设置,满足调试和发布的不同需求. Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 Debug是调试版本,Debug和Rel

  • iOS实时监控网络状态的改变

    在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的:  (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)  (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验  WIFI网络:自动下载高清图片  4G/3G网络:只下载缩略图  没有网络:只显示离线的缓存数据  常用的有以下两种方法:  (1).使用苹果观法提供的检测iOS设备网络环境用的库 Reachablity  (2).使用AFN框架中的AFNetworkReachabilityManager

  • iOS App开发中使用设计模式中的单例模式的实例解析

    一.单例的作用 顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次.它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值.UIApplication.NSUserDefaults等都是IOS中的系统单例. 二.单例模式的两种写法 1,常用写法 #import "LGManagerCenter.h" static LGManagerCenter *managerCenter; @implementation LGManagerCe

  • IOS 签名错误codesign failed with exit code 1解决方法

    IOS 签名错误 前日,Macbook的硬盘不幸挂了,于是将开发环境迁移到Mac Mini下.大家知道,对于Xcode来说,最麻烦的就是各种证书.ProvisioningProfile的配置问题.将原来的各种开发证书和.p12证书导入到mini上,接下来就碰到了各种莫名其妙的问题.先是无法development(可以debug),发现是证书导错了(没有用Agent证书,只有Agent可以发布).于是制作证书请求,重新下载证书. 等到部署的问题解决后,又发现无法调试--真机可以,但模拟器不行,一进

  • React Native搭建iOS开发环境

    一.写在前面 1. 什么是React-Native? React-Native是:Facebook 在2015年初React.js技术研讨大会上公布的一个开源项目.支持用开源的JavaScript库React.js来开发iOS和Android原生App.初期仅支持iOS平台,同年9月份,该开源项目同时支持Android平台. React Native的原理是:在JavaScript中用React抽象操作系统原生的UI组件,代替DOM元素来渲染,比如以<View>取代<div>,以&

  • iOS 检测网络状态的两种方法

    一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化. 一:Reachability 1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame. 2. 在AppDelegate.m中这样实现: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc

  • IOS简单实现瀑布流UICollectionView

    UICollectionView 比tableView 灵活,功能也强大很多.系统实现了流式布局,但用处还有很多限制. 要想实现更灵活的布局,就咬重写UICollectionViewLayout. 先看下实现效果: 废话不多说,直接上代码: 先看WaterfallCollectionLayout.m #import "WaterfallCollectionLayout.h" #define colMargin 5 #define colCount 4 #define rolMargin

  • 详解iOS使用Keychain中的kSecClassGenericPassword存储数据

    iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌.苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等.它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的.模拟器下keychain文件路径:~/Library/Application Support/iPhone Simulator/4.3/Library/Keychains ke

  • iOS将视频录像切成一张张缩略图

    本文实例为大家分享了iOS视频录像切成缩略图的具体代码,供大家参考,具体内容如下 记得导入系统库 #import < MediaPlayer/MediaPlayer.h > 代码: /** * 获取网络视频的全部缩略图方法 * * @param videoURL 视频的链接地址 * * @return 视频截图 */ + (UIImage *)ihefe_previewImageWithVideoURL:(NSURL *)videoURL { AVAsset *asset = [AVAsset

随机推荐