私は常に更新しています(〜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];
}
これはNSTimerによって0.03秒ごとに強制終了されます。私が論理的にdebtString
を解放できると思った1つの場所は、長い長い整数に変換された後でした。しかし、これはアプリをクラッシュさせます。 [debtString retain]
行を削除すると、アプリがクラッシュします。
メモリのビルドアップは、14バイトの文字列であり、迅速かつ高速です。毎秒462バイトのミスアロケートメモリが作成され、すべての調整とともに、およそ3696バイト/秒になります。これは私が無視できる漏れではありません。私はちょうどループのどこにそれをリリースするか分からない!
あなたは動的にそのような場でUILabelのテキストを更新することはできますか? 'mylabel.text'を更新すると自動的にビューに反映されますか? –
はい。 IBに 'UILabel'を追加すると、自分で割り当てる必要はありません。 '.text'プロパティを更新するだけです。 – highlycaffeinated
提案した変更(コードブロック内の変更)を行うと、NSExceptionが発生し、アプリケーションがクラッシュします。 –