NSError **'潜在的空取消引用.....'

时间:2018-02-14 20:11:26

标签: objective-c non-nullable

给出以下示例:

- (BOOL) doSomething: (NSError**) pError
{
    *pError = [NSError ....];
}

Analyzer将返回以下错误:

  

潜在的空取消引用。根据'创建和返回NSError对象'中的编码标准。参数可以为null。

建议将此更改为:

- (BOOL) doSomething: (NSError**) pError
{
    if(pError)
    {
        *pError = [NSError ....];
    }
}

但是我更喜欢在error参数中添加一个nonnull属性来阻止使用传递null。我无法弄清楚如何获得正确的参数。双指针是否有可能具有非空属性?

1 个答案:

答案 0 :(得分:2)

  

但是我更喜欢在error参数中添加一个nonnull属性来阻止使用传递null。

您正在寻找的语法显示在各种Stack Overflow答案中,例如Objective-C nullability for output parameters。所以你可以声明,例如:

(NSError * _Nullable * _Nonnull)

...并出现所需的警告:

enter image description here

但是,我会建议您只是停止选择。分析仪对模式非常正确;你应该听听它告诉你什么。

调用通过间接返回NSError的方法的标准完整模式是,例如:

NSString* path = // ... whatever;
NSStringEncoding enc = // ... whatever;
NSError* err = nil;
NSString* s =
    [NSString stringWithContentsOfFile:path encoding:enc error:&err];
if (nil == s) // oops! something went wrong...

但是,让我们说我绝对肯定这会起作用。然后说:

是合法的
NSString* path = // ... whatever;
NSStringEncoding enc = // ... whatever;
NSString* s =
    [NSString stringWithContentsOfFile:path encoding:enc error:nil];

你不应该排除这种情况;这是合情合理的。