2012-04-20 10 views
6

He visto muchas preguntas/respuestas sobre fugas de memoria en NSDateFormatter, pero ninguna parece ayudarme a determinar qué causa la pérdida de memoria en mi aplicación. Aquí está mi código:Pérdida de memoria durante el uso de NSDateFormatter

- (id)init 
{ 
    if ((self = [super init])) 
    { 
     items = [[NSMutableArray alloc] init]; 
     events = [[NSMutableArray alloc] init]; 
     buffer = [[NSMutableData alloc] init]; 
     format = [[NSDateFormatter alloc] init]; 
     lastFromDate = @""; 
    } 
    return self; 
} 

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate 
{ 
    [format setTimeZone:[NSTimeZone systemTimeZone]]; 
    [format setDateFormat:@"MM/dd/yyyy"]; 
    NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 
    NSString *stringToDate = [NSString stringWithString:[format stringFromDate:toDate]]; 

    NSLog(@"From date: %@, To date: %@", stringFromDate, stringToDate); 

    [self didDatesChange:stringFromDate]; 

    if (dataReady) { 
     [callback loadedDataSource:self]; 
     return; 
    } 
    callback = delegate; 
    [self retrieveEventData:stringFromDate to:stringToDate]; 
} 

- (void)dealloc 
{ 
    [items release]; 
    [events release]; 
    [buffer release]; 
    [lastFromDate release]; 
    [format release]; 
    [super dealloc]; 
} 

Cuando corro "Perfil" -> "fugas", consigo una pérdida de memoria cada vez que la función se llama en la línea

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 

Puede alguien explicar lo que podría ser pasando? Gracias, Mike

+1

por favor, puesto didDatesChange: y retrieveEventDa ta: a :. ya que no hay fugas obvias en el código en su pregunta, mi suposición es una retención desequilibrada dentro de uno de esos métodos. – danh

+1

¿por qué los instrumentos me señalarían a la línea donde se formateaba NSDate si las fugas estaban en una de esas funciones? –

Respuesta

2

FYI puede cambiar esto:

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 

a esto:

NSString *stringFromDate = [format stringFromDate:fromDate]; 

stringWithString debe devolver un NSString autoreleased aunque por lo que no creo que es la fuente de su fuga. Parece que no hay fugas en tu código para mí.

2

sólo tiene que utilizar el método de abajo cadena GET desde la fecha de su labor adecuadamente ......

-(NSString *)StringFromDate:(NSDate *)DateLocal{ 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MM/dd/yyyy"]; 
    NSString *dateString = [dateFormat stringFromDate:DateLocal]; 
    NSLog(@"Date is HERE =====>> %@",dateString); 
    return dateString; 
} 

después cuando se desea conseguir cadena de fecha sólo tiene que utilizar como abajo ....

NSString *stringFromDate = [self stringFromDate:fromDate]]; 
[stringfromdate retain]; 
NSString *stringToDate = [self stringFromDate:toDate]]; 
[stringTodate retain]; 

y por encima de - (NSString *) StringFromDate: (NSDate *) método DateLocal es deben definir en el archivo de viewcontroller.m .... su trabajo fino ....

+1

necesita liberar el NSDateFormatter que asigna en el método. –

+0

sí lo sé, pero ahora solo defino el código que es útil para el usuario con su problema, uso dateFormat globaly en mi aplicación ..... aunque Thanx ... :-) –

+1

Tengo NSDateFormatter definido globalmente, porque no No quiero crear uno nuevo cada vez que se llame a esta función. Esto lo recrearía cada vez, ¿correcto? ¿Hay ventajas/desventajas en eso? –

Cuestiones relacionadas