Может ли повторное использование одного и того же объекта NSError быть проблематичным?

С тех пор я изменил свою реализацию, чтобы больше не делать этого, но мне было бы интересно узнать, может ли следующее привести к проблемам - например, процесс, который имеет несколько шагов, каждый из которых связан с передачей ссылки на объект 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, которую можно найти здесь:

При работе с ошибками, передаваемыми по ссылке, важно проверить возвращаемое значение метода, чтобы увидеть, произошла ли ошибка, поскольку показано выше. Не пытайтесь проверить, установлен ли указатель ошибок чтобы указать на ошибку.

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ErrorHandling/ErrorHandling.html

Ответ 1

Согласно документации Apple, вы никогда не должны проверять объект NSError, возвращаемый ссылкой. Вместо этого проверьте возвращаемое значение метода init... или метод factory, который вы вызываете, например:

NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (data == nil) {
     // Handle failure. It safe to use the error object here.
}

Однако ваш код, похоже, ничего не делает с экземпляром NSError (например, протоколирование или отображение предупреждения), поэтому вы можете просто передать NULL.

NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL];
if (data == nil) {
     // Handle failure.
}