常に更新している文字列があります(1秒間に約33回)。それは何度も何度も使用され、私が行っているループの中に遍在しています。これはループです:
- (void)add{
int r = (arc4random() % 30) + 51;
long long debtInt = [debtString longLongValue];
long long multiplier = r;
long long debtAdj = multiplier + debtInt;
debtString = [NSString stringWithFormat:@"%lli", debtAdj];
[debtString retain];
[self formating];
}
- (void)formating{
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:debtString];
[f release];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setMaximumFractionDigits:0];
NSString *formattedNumberString = [numberFormatter stringFromNumber:myNumber];
[numberFormatter release];
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 325, 100)];
myLabel.font = [UIFont fontWithName:@"Verdana" size: 20.0];
myLabel.text = formattedNumberString;
myLabel.textAlignment = UITextAlignmentCenter;
[self.view addSubview:myLabel];
[myLabel release];
}
これは、0.03秒ごとにNSTimerによって起動されます。論理的に解放できると思ったのdebtString
は、longlong整数に変換された後です。ただし、これによりアプリがクラッシュします。行を削除する[debtString retain]
と、アプリがクラッシュします。
メモリの蓄積は迅速かつ高速で、14バイトの文字列です。毎秒、さらに462バイトの誤って割り当てられたメモリが作成され、すべての調整とともに、約3696バイト/秒になります。これは私が無視できるリークではありません。ループのどこでリリースするのかわかりません!