2011-08-03 8 views
0

NSNumber forループ内のメモリーがリークしています - OSX LionのXcode Instrumentsバージョン4.1で発生が開始されました。任意のアイデアを高く評価NSNumber Forループ内でメモリーnumberWithIntをリークします

 int currentActivityScore = [self.activityScore intValue]; 
     int deltaCriteriaScore = [[segmentItemArray objectAtIndex:3] intValue]; 
     int newActivityScore = currentActivityScore + deltaCriteriaScore; 
     self.activityScore = [NSNumber numberWithInt:newActivityScore]; 

私もこのコードを試しましたが、まだリークが発生しています。

 int currentActivityScore = [self.activityScore intValue]; 
     int deltaCriteriaScore = [[segmentItemArray objectAtIndex:3] intValue]; 
     int newActivityScore = currentActivityScore + deltaCriteriaScore; 
     NSNumber *newActivityScoreNumber = [[NSNumber alloc] initWithInt:newActivityScore]; 
     self.activityScore = newActivityScoreNumber; 
     [newActivityScoreNumber release]; 
+0

'activityScore'を' retain'または 'copy'と宣言していますか? – tia

+0

'-dealloc'で' activityScore'の所有権を放棄していますか? –

+0

これを指している間、これはリークではありません。楽器は、漏れの "原因"として作成された場所を指しますが、実際の原因*は、あなたがそれをきれいに取り除く方法ではありません。どのようにこの象牙を処分しますか? – bshirley

答えて

0

activityScoreがその値を保持またはコピーしているとすれば、あなたのコードは大丈夫だと思います。

偽陽性を示す(または本物の漏れが見逃される)ことは、楽器にとってはあまり知られていません。リークを保証するのではなく、二重チェックするコードへのポインタだと考えてください。

+0

これはリークを提供しています。私が見つけたのは、このリークはForループ内に入れたときだけです。 –

+0

あなたが私たちに示したコードにはリークはありません。あなたにもっとコードを表示する必要があるか、またはこれがInstrumentsから偽陽性であるということを受け入れる必要があります。 –

+0

これは私にとってはうまくいきました。ループ内で計算をしなかっただけで、ローカル変数が作成され、Forループの後にクラスプロパティに代入されました。これで問題は解決しました。 –

0
NSNumber *newActivityScoreNumber = [NSNumber numberWithInt:newActivityScore]; 
self.activityScore = newActivityScoreNumber; 

だからここのNSNumberが自動解放されています。あなたはそれについて気にする必要はありません。

+0

そして、OPコードとの違いは...? –

+0

私はループの中に置くとき、彼らは私のために両方のメモリをリークします。 –

関連する問題