обрабатывать NSError с помощью ARC - утечка - PullRequest
1 голос
/ 11 марта 2012
- (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 »параметр« »может быть нулевым»
Как это исправить?

Ответы [ 2 ]

14 голосов
/ 11 марта 2012

Сначала необходимо проверить, является ли anError nil или NULL:

if (anError) {
    *anError = [[NSError alloc] initWithDomain:@"my domain" code:errorCode userInfo:userDict];
}
6 голосов
/ 11 марта 2012

На самом деле это не предупреждение об утечке, а потенциальная разыменование нулевого указателя. Компилятор жалуется на строку

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

Вы присваиваете место, на которое указывает anError, не проверяя, является ли anError фактически нулевым указателем (что допускается «в соответствии со стандартом кодирования») и может произойти, если вызывающий объект не заинтересован в подробная информация об ошибке).

...