С тех пор я изменил свою реализацию, чтобы больше не делать этого, но мне было бы интересно узнать, может ли следующее привести к проблемам - например, процесс, который имеет несколько шагов, каждый из которых связан с передачей ссылки на объект NSError. Если бы вы повторно использовали этот объект ошибки каждый шаг по пути, могла бы эта ссылка быть отрицательно выполнена каким-то образом, возможно, что привело бы к некоторому сбою управления памятью /dealloc crash?
Пример (большая часть промежуточного кода опущена)
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (!data) {
return error;
}
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!responseData) {
return error;
}
NSDictionary *resultDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
if (!resultDictionary) {
return error;
}
Несмотря на то, что ошибка никогда не используется дважды, что означает, что ошибка будет равна нулю (кажется) в следующий раз, когда ее ссылка передается другому методу, может ли ссылка каким-либо образом выполняться на любом из шагов вдоль способ?
Оригинальный код перед редактированием в ответ на комментарии jlehr:
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (error) {
return;
}
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error) {
return;
}
NSDictionary *resultDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
if (error) {
return;
}
РЕДАКТИРОВАТЬ: Кому-то, кто придет к этому позже, относится к информации jlehr, которую можно найти здесь:
При работе с ошибками, передаваемыми по ссылке, важно проверить возвращаемое значение метода, чтобы увидеть, произошла ли ошибка, поскольку показано выше. Не пытайтесь проверить, установлен ли указатель ошибок чтобы указать на ошибку.