NSError** 'Potential null dereference.....'
NSError** 'Potential null dereference.....'
举例如下:
- (BOOL) doSomething: (NSError**) pError
{
*pError = [NSError ....];
}
分析器会return以下错误:
Potential null dereference. According to coding standards in 'Creating and Returning NSError Objects' the parameter may be null.
建议将其更改为:
- (BOOL) doSomething: (NSError**) pError
{
if(pError)
{
*pError = [NSError ....];
}
}
但我更愿意向错误参数添加一个非空属性,以阻止使用传递空值。我无法弄清楚如何使论点正确。双指针是否可能具有非空属性?
But I would prefer to add a nonnull attribute to the error parameter to discourage the use of passing a null.
您正在寻找的语法显示在各种 Stack Overflow 答案中,例如 。所以你可以声明,例如:
(NSError * _Nullable * _Nonnull)
...然后会出现所需的警告:
不过,我建议您不要再偏爱它了。分析器对模式的判断是正确的;你应该听听它在告诉你什么。
通过间接调用 returns 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];
你不应该排除这种可能性;很合理也很正常。
举例如下:
- (BOOL) doSomething: (NSError**) pError
{
*pError = [NSError ....];
}
分析器会return以下错误:
Potential null dereference. According to coding standards in 'Creating and Returning NSError Objects' the parameter may be null.
建议将其更改为:
- (BOOL) doSomething: (NSError**) pError
{
if(pError)
{
*pError = [NSError ....];
}
}
但我更愿意向错误参数添加一个非空属性,以阻止使用传递空值。我无法弄清楚如何使论点正确。双指针是否可能具有非空属性?
But I would prefer to add a nonnull attribute to the error parameter to discourage the use of passing a null.
您正在寻找的语法显示在各种 Stack Overflow 答案中,例如
(NSError * _Nullable * _Nonnull)
...然后会出现所需的警告:
不过,我建议您不要再偏爱它了。分析器对模式的判断是正确的;你应该听听它在告诉你什么。
通过间接调用 returns 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];
你不应该排除这种可能性;很合理也很正常。