我有一个不断更新的字符串(每秒约 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
是在它被转换为一个 long long 整数之后。但是,这会使应用程序崩溃。如果我删除该[debtString retain]
行,应用程序将崩溃。
内存建立起来很快,它是一个 14 字节的字符串。每秒创建另外 462 字节的错误分配内存,连同所有的调整,大约为 3696 字节/秒。这不是我可以忽略的泄漏。我只是不知道在哪里释放它循环!