У меня есть строка, которую я постоянно обновляю (~ 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
, было после того, как он был преобразован в длинное целое число. Это, однако, вылетает приложение. Если я удаляю строку [debtString retain]
, приложение вылетает.
Быстрое и быстрое наращивание памяти, это 14-байтовая строка. Каждую секунду, которая создает еще 462 байта неправильно распределенной памяти, что вместе со всеми настройками достигает примерно 3696 байт / сек. Это не утечка, которую я могу игнорировать. Я просто не знаю, где выпустить это в цикле!