怎么做网站埋点,怎样免费做公司网站,搜索网址的浏览器,品牌注册查询系统2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17https://www.jianshu.com/p/3072e174554fNSAssert和NSParameterAssert在开发环境中经常被使用#xff0c;调试和验证代码参数的完整性#xff0c;断言为真#xff0c;则表明程序运行正常#xff0c;而断言为假#xff0… 2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17 https://www.jianshu.com/p/3072e174554f NSAssert和NSParameterAssert在开发环境中经常被使用调试和验证代码参数的完整性断言为真则表明程序运行正常而断言为假则意味着它已经在代码中发现了意料之外的错误。xCode中的断言在Debug模式默认是开启的Realse版本中是禁用的. 基础断言 基础类库中了两种断言NSAssert和NSParameterAssert是OC断言NSCAssert和NSCParameterAssert是C语言断言。先来看一下NSAssert定义:precodeThe NSAssert macro evaluates the condition and serves as a front end to the assertion handler. Each thread has its own assertion handler, which is an object of class NSAssertionHandler. When invoked, an assertion handler prints an error message that includes the method and class names (or the function name). It then raises an NSInternalInconsistencyException exception. If condition evaluates to NO, the macro invokes handleFailureInMethod:object:file:lineNumber:description: on the assertion handler for the current thread, passing desc as the description string. This macro should be used only within Objective-C methods. Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined. **Important:Important** Do not call functions with side effects in the condition parameter of this macro. The condition parameter is not evaluated when assertions are disabled, so if you call functions with side effects, those functions may never get called when you build the project in a non-debug configuration. **Note:Note** Not all release configurations disable assertions by default./code/preNSParameterAssert的定义:preAssertions 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 class NSAssertionHandler. When invoked, an assertion handler prints an error message that includes method and class names (or the function name). It then raises an NSInternalInconsistencyException exception. 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. Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined. All assertion macros return void. **Important:Important** Do not call functions with side effects in the condition parameter of this macro. The condition parameter is not evaluated when assertions are disabled, so if you call functions with side effects, those functions may never get called when you build the project in a non-debug configuration. **Note:Note** Not all release configurations disable assertions by default./pre两者的定义类似大概意思就是如果是false就会调用当前线程Assertion Hanlder进行处理非Debug模式下可能所有的断言都不会调用最后一句很重要并不是所有的发布配置会禁用断言如果想看断言是否禁用需要看一下设置: Snip20160505_1.png 简单测试:precodeNSString *result中山郎;NSInteger count10;NSAssert(count10, 总数必须大于10);NSLog(断言执行之后); /code/pre 崩溃信息 precode** FECategory[23811:248235] *** Assertion failure in -[ViewController setupAssert], /ViewController.m:45**** FECategory[23811:248235] *** Terminating app due to uncaught exception NSInternalInconsistencyException, reason: ****总数必须大于****10**/code/pre NSAssertionHandler NSAssert异常处理的时候默认是NSAssertionHandler处理的不过我们可以自定自己的Handler实现两个方法:precode (void)handleFailureInMethod:(SEL)selector object:(id)object file:(NSString *)fileName lineNumber:(NSInteger)line description:(nullable NSString *)format,... NS_FORMAT_FUNCTION(5,6);(void)handleFailureInFunction:(NSString *)functionName file:(NSString *)fileName lineNumber:(NSInteger)line description:(nullable NSString *)format,... NS_FORMAT_FUNCTION(4,5);/code/prehandleFailureInMethod处理OC方法中的断言handleFailureInFunction处理C函数中的断言自定义继承自NSAssertionHandler的类FEAssertionHandlerprecodeimplementation FEAssertionHandler -(void)handleFailureInMethod:(SEL)selector object:(id)object file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format, ...{NSLog(FlyElephant-FEAssertionHandler: Method % for object % in %--line:%li, NSStringFromSelector(selector), object, fileName, (long)line);} -(void)handleFailureInFunction:(NSString *)functionName file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format, ...{NSLog(FlyElephant-FEAssertionHandler:Function (%) in %--line:%li, functionName, fileName, (long)line);} end/code/pre AppDelegate中设置断言处理: precode (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.FEAssertionHandler *hanlder[[FEAssertionHandler alloc]init];[[[NSThread currentThread] threadDictionary] setValue:hanlder forKey:NSAssertionHandlerKey];return YES;} 转载于:https://www.cnblogs.com/sundaysgarden/p/10354170.html