objective c - Recuento automático de referencias: puntero al tipo "NSError*" sin constancia sin propiedad explícita
objective-c ios (2)
Al actualizar parte de mi código para que sea compatible con el iOS 5 SDK, intenté refactorizar mi código usando "Convertir a ARC Objective-C" en Xcode y recibí un error. El error se produce en una variable de instancia en mi archivo .h.
NSError **_error;
El error dice "Puntero para no constar el tipo ''NSError *'' sin propiedad explícita". ¿Cómo puedo arreglar esto?
Al almacenar objetos NSError
en una variable de instancia, debe declararlo como un puntero simple:
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
solo se usa para devolver indirectamente objetos NSError
de un método al llamante. Es (probablemente) un error almacenarlo en una variable de instancia.
Puede usar uno de los calificadores de por vida descritos en Transición a las Notas de versión de ARC
Para NSError ** usaría __autoreleasing, por lo que el ejemplo proporcionado por Nikolai se vería así:
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
La sintaxis es un poco rara y debe seguir los consejos de Nikolais, pero si está seguro de que NSError ** es lo que desea, debería funcionar.