2011-07-05 134 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]; 
    }