gpt4 book ai didi

iphone - 内存分配问题

转载 作者:行者123 更新时间:2023-12-03 20:28:34 24 4
gpt4 key购买 nike

我有一个正在不断更新的字符串(每秒约 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 触发一次。我认为我可以逻辑地释放债务字符串的一个地方是在它转换为一个 long long 整数之后。然而,这会使应用程序崩溃。如果我删除 [debtString keep] 行,应用程序就会崩溃。

内存的建立非常快,它是一个 14 字节的字符串。每一秒都会创建另外 462 字节的错误分配内存,加上所有调整,结果约为 3696 字节/秒。这不是我可以忽视的泄漏。我只是不知道在循环中哪里释放它!

最佳答案

如果您决心这样做,则应该在循环的每次迭代中、在重新分配值之前释放您的 debtString:

[debtString release];    
debtString = [NSString stringWithFormat:@"%lli", debtAdj];
[debtString retain];

但是,您每次循环都会创建一个新实例。您最好使用单个 NSMutableString (如 @OscarMk 建议)并每次更新它。并且不要每次都创建一个新的UILabel。只需创建一个并每次通过循环更新内容即可。

关于iphone - 内存分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6755381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com