que tienen una porción de código de Objective-C que se parece a lo siguiente:¿Cómo puedo solucionar esta advertencia de clang: "El objeto con +0 retendrá los conteos devueltos al llamador donde se espera el recuento de retención de +1 (poseer)?"
- (NSString *)copyData:(NSData *)data
{
NSString *path = [[[self outputDirectory] stringByAppendingPathComponent:@"archive"] stringByAppendingPathExtension:@"zip"];
NSLog(@"Copying data to %@", path);
[data writeToFile:path atomically:NO];
return path;
}
El código se llama desde un inicializador que tiene este aspecto:
- (id)initWithData:(NSData *)data
{
if ((self = [super init]) != nil) {
NSString *path = [self copyData:data]; // Line 41 (referenced in warning, shown below)
return [self initWithContentsOfFile:path];
}
return self;
}
Al ejecutar el analizador estático sonido metálico, consigo las siguientes advertencias para el path
variables:
potenciales de fuga de un objeto asignado en la línea 41 y se almacena en el 'camino'
objeto con +0 retener los recuentos volvió a llamante, donde 1 (propietaria) se espera retener recuento
estoy confundido. Mi entendimiento es que stringByAppendingPathComponent
debería devolver una cadena autoreleased, por lo que debe tener una red retener cuenta de 0. (Obviamente yo no quiero para retenerlo.)
He intentado alterar copyData:
para volver lo siguiente, pero no se deshizo de la advertencia:
return [[path retain] autorelease];
¿Cuál es el problema con esta advertencia?
¡Esta respuesta acaba de eliminar tantas advertencias incorrectas de mi proyecto! –