2011-07-05 135 views
4

我在NSDate有内存泄漏。请查看下面的代码。NSDate内存泄漏问题

-(void)myMethods:(NSDate *)currentTime{ 
    [NSThread detachNewThreadSelector:@selector(mySecondMethods) toTarget:self withObject:nil]; 
} 

-(void) mySecondMethods{ 
    NSDate * currentDateTime = [NSDate date];------->memory leak here 

    for (Event * event in array) { 
     if(![event checkOccur:currentDateTime]){ 
      return; 
     } else { 
      [NSThread detachNewThreadSelector:@selector(start) toTarget:event withObject:nil];  
     } 
    } 
} 

回答

7

如果您在线程中调用任何方法,您必须使用Autorelease Pool。

-(void) mySecondMethods 
{ 

    NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; 
    NSDate * currentDateTime = [NSDate date]; 

    for (Event * event in array) { 
    if(![event checkOccur:currentDateTime]) 
    { 
     return; 
    } 
    else{ 
     [NSThread detachNewThreadSelector:@selector(start) toTarget:event withObject:nil]; 

    } 
    [pool drain]; 
} 
+0

嘿感谢4 reply.i添加nsautorelease游泳池,但它显示在泄漏池nsautorelease您 –

+1

需要确保排水获取调用。如果'返回'它击中池不会流失。 – TurqMage

0
-(void) mySecondMethods{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

     NSDate * currentDateTime = [NSDate date]; 

    for (Event * event in array) { 
     if(![event checkOccur:currentDateTime]){ 
      return; 
     } 
     else{ 
      [NSThread detachNewThreadSelector:@selector(start) toTarget:event withObject:nil]; 

     } 

    } 
    [pool release]; 
    }