【问题标题】:handle NSError using ARC - leak使用 ARC 处理 NSError - 泄漏
【发布时间】:2012-03-11 16:33:48
【问题描述】:
- (BOOL)parserJSONString:(NSString *)jsonString error:(NSError **)anError {
   //some data getting
   //error handle

    NSString *description = @"phone number couldn't be using";
    NSString *recoverySuggestion = @"Please provide an other phone number.";
    NSInteger errorCode = -1;
    NSArray *keys = [NSArray arrayWithObjects: NSLocalizedDescriptionKey, NSLocalizedRecoverySuggestionErrorKey, nil];
    NSArray *values = [NSArray arrayWithObjects:description, recoverySuggestion, nil];
    NSDictionary *userDict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
    *anError = [[NSError alloc] initWithDomain:@"my domain" code:errorCode userInfo:userDict];
    return NO;
}

*anError = [[NSError alloc] initWithDomain:@"my domain" code:errorCode userInfo:userDict]; 编译器给出下一个泄漏警告 “潜在的空值取消引用。根据‘创建和返回 NSError 对象’中的编码标准,参数‘’可能为空”
如何解决这个问题?

【问题讨论】:

    标签: iphone objective-c ios ipad automatic-ref-counting


    【解决方案1】:

    你需要先检查anErrornil还是NULL

    if (anError) {
        *anError = [[NSError alloc] initWithDomain:@"my domain" code:errorCode userInfo:userDict];
    }
    

    【讨论】:

    • 虽然@Dirk 的答案包含有关原因的更多信息,但 DarkDust 的答案包含实际分辨率。为此 +1。
    【解决方案2】:

    这实际上不是泄漏警告,而是可能取消引用空指针。编译器抱怨这一行

    *anError = [[NSError alloc] initWithDomain:@"my domain" code:errorCode userInfo:userDict];
    

    您分配给anError 指向的位置而不检查anError 是否实际上是空指针(“根据编码标准”是允许的,并且如果调用者不感兴趣,则可能发生详细的错误信息)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2012-12-09
      • 2012-04-03
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2012-09-14
      相关资源
      最近更新 更多