Existen muchos métodos Cocoa que requieren un objeto NSError como parámetro para un método, pero en realidad son un medio para devolver un objeto de error al método de llamada si existen errores. ¿Este objeto devuelto se retiene? Es decir, en el código objeto que llama (el método al que se devuelve el error), qué es necesario que haya un poco de código como:¿Debo liberar un objeto NSError devuelto?
NSError *error;
[apiCall .... error:&error];
if (error){
[*error release];
}
No he visto esto en cualquier lugar, y si no tiene por qué ser lanzado, ¿es esta la manera de hacerlo?
El motivo por el que puse el [* código de error] es que también puede especificar el error NSError var como: NSError **; Que es un punto a un punto del objeto. Es esto valido? – casademora
Especifica 'NSError **' como un tipo para 'error' solo cuando es un" parámetro de salida "o un" parámetro de salida ". En ese caso, eliminarías la referencia, pero ten en cuenta que '* error' tendría el tipo' NSError * '. Utiliza parámetros para evitar el hecho de que las funciones tienen solo un valor de retorno. Los parámetros Out en Objc-C usan 'Type **' porque los argumentos son pass-by-value. Tenga en cuenta también que si 'error' tenía el tipo' NSError ** ', tendría que inicializarlo con un puntero a' NSError * '(que es lo que hace en la llamada API) o asignar un puntero, lo que sucede pero es un poco extraño. – outis
@outis Si se libera automáticamente, no lo está utilizando en el método del llamante incorrecto. Debido a que el alcance del método que realmente creó el NSError * y lo asignó al parámetro de salida NSError ** ha finalizado con la llamada al método y luego lo usamos en el llamador. – SayeedHussain