静态分析中”Potential null dereference”的处理
2015-08-26 09:02
766 查看
我们在写一个方法时,如果希望在方法执行出错时,获取一个NSError对象,我们通常会像下面这样来定义我们的方法
+ (NSString )checkStringLength:(NSString *)str error:(NSError **)error { if (str.length <= 0) { *error = [NSError errorWithDomain:@"ErrorDomain" code:-1 userInfo:nil]; return nil; } return str; }这段代码看着没啥问题,至少在语法上是OK的,所以在编译时,编译器并不会报任何警告。
如果我们用以下方式去调用的话,也是一切正常的:
NSError *error = nil; [Test checkStringLength:@"" error:&error];不过我们如果就静态分析器来分析一下,发现会在”*error = …“这行代码处报如下的警告:
Potential null dereference. According to coding standards in ‘Creating and Returning NSError Objects’ the parameter may be null这句话告诉我们的是这里可能存在空引用。实际上,如果我们像下面这样调用方法的话,程序是会崩溃的:
[Test checkStringLength:@"" error:NULL];因为此时在方法中,error实际上是NULL,*error这货啥也不是,对它赋值肯定就出错了。
这里正确的姿式是在使用error之前,先判断它是否为NULL,完整的代码如下:
+ (NSString )checkStringLength:(NSString *)str error:(NSError **)error { if (str.length <= 0) { if (error != NULL) { *error = [NSError errorWithDomain:@"ErrorDomain" code:-1 userInfo:nil]; } return nil; } return str; }实际上,对此这种方式的传值,我们始终需要去做非空判断。
相关文章推荐
- 验证整数、小数、实数、有效位小数最简单JavaScript正则表达式
- Buffer创始人谈开发:先验证,后开发!
- JQuery Mobile 简单入门引导
- jQuery的deferred对象详解
- jQuery如何实现点击页面获得当前点击元素
- HTML5 Introduction
- 集群环境下JSP中获取客户端IP地址的方法
- [ACdream 1211 Reactor Cooling]无源无汇有上下界的可行流
- JQUERY 模糊选择
- Json 入门例子【3】
- webapi 返回Json数据格式中的null值替换
- node-zk-browser安装配置
- ReactiveCocoa - iOS开发的新框架
- (function($){...})(jQuery)是什么意思
- node.js(八) 有趣的东西才开始哦
- javascript中alert()与console.log()的区别
- js钢琴按钮波浪式图片排列效果代码分享
- jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
- jQuery三级下拉列表导航菜单代码分享
- jquery实现的横向二级导航效果代码