2011-07-05 21 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

スレッド内の任意のメソッドを呼び出す場合は、自動解放プールを使用する必要があります。

-(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プールを追加しましたが、あなたはドレインと呼ばなっていることを確認する必要があり –

+1

それはnsautoreleaseプールでのリークを示します。 'return'がプールに当たっても、それは消えません。 – 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]; 
    }