2012-03-19 8 views
6

El siguiente método de ayuda de clase única (SharedManager) puede estar provocando un ciclo de retención. Obtener advertencias en el analizador estático: "Posible fuga de un objeto asignado en la línea ..." ¿Cómo puedo solucionarlo?Soluciona la fuga de memoria potencial en ARC

Intenté hacer ivar uuid __weak pero todavía aparece una advertencia cuando analizo.

NSString *__weak uuid = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 

Gracias

ser llamado en la clase de este modo:

myUUID = [SharedManager generateUUID]; 



+ (NSString *)generateUUID 
{ 

CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); 
NSString *uuid = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 
CFRelease(uuidObject); 

    return uuid; 

} 

Respuesta

6
NSString *uuid = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 

¿Tiene que quitar el aviso?

+0

Pedro, Sí, lo hizo. Gracias. Necesito entender de qué se trata __bridge_transfer. – Slinky

+0

Eche un vistazo a http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.casts –

+0

Perfecto. Gracias – Slinky

7

Aquí es una manera de liberarlos:

- (NSString *) uuid 
{ 
    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    NSString *uuid = [NSString stringWithString:(NSString *) 
    uuidStringRef]; 
    CFRelease(uuidStringRef); 
    return uuid; 
} 

Fuente: http://www.cocoabuilder.com/archive/cocoa/217665-how-to-create-guid.html