关于“潜在空解除引用”的Clang错误

我不断得到Clang错误的代码,我不明白为什么他们是错误的,或者如何解决他们克朗的满意度:

+ (NSString *)checkForLength: (NSString *)theString error: (NSError **)error { BOOL hasLength = ([theString length] > 0); if (hasLength) return theString; else { *error = [NSError errorWithDomain:@"ErrorDomain" code:hasLength userInfo:nil]; return nil; } } 

撇开这个例子的完全devise的本质(Clang所反对的,所以这个例子足够说明问题),Clang在错误分配线上抱怨以下的反对意见:

潜在的空解除。 根据“创build和返回NSError对象”中的编码标准,参数“错误”可能为空。

我喜欢有一个原始的Clang报告。 我已阅读引用的文件,我不能看到一个方法去做预期的事情; 我查了一些开源的Cocoa库,这似乎是一个常见的习惯用法。 有任何想法吗?

2 Solutions collect form web for “关于“潜在空解除引用”的Clang错误”

该文件的清单3-5显示了预期的方式。 用你的例子代码:

 + (NSString *)checkForLength: (NSString *)theString error: (NSError **)error { BOOL hasLength = ([theString length] > 0); if (hasLength) return theString; else { if (error != NULL) *error = [NSError errorWithDomain:@"ErrorDomain" code:hasLength userInfo:nil]; return nil; } } 

Cocoa约定是返回值应该表示成功或失败(在这种情况下,返回nil表示失败),并且错误被附加信息填充,但是只有当调用者请求时。

换一种说法

 NSError *error = nil; NSString *result = [self checkForLength: aString error: &error]; 

 NSString *result = [self checkForLength: aString error: NULL]; 

都是调用该方法的有效方法。 所以方法体应该总是检查一个NULL错误参数:

 if (error != NULL) *error = ...; 
  • 更改UITableView节标题的默认滚动行为
  • 以编程方式打开设置应用程序(iPhone)
  • 将转义的UTF8字符转换回原来的forms
  • 将字体embedded到mac包中
  • 如何在Cocoa / Objective-C中编写一个简单的Ping方法
  • UILabel文字边距
  • 是否有任何现成的iPhone应用程序的日历控制?
  • 在本地iPhone应用程序中重复背景图像
  • 从UITableView单元格中的URL加载asynchronous图像 - 滚动时图像更改为错误的图像
  • 将自定义对象存储在NSUserDefaults中的NSMutableArray中
  • 隐藏UITabBar?