gpt4 book ai didi

NSMutableArray 中的 ios NSNumber 未释放

转载 作者:行者123 更新时间:2023-11-29 00:42:26 27 4
gpt4 key购买 nike

我的程序运行正常,但是内存占用增长很快,我调试了很长时间,发现了这样的问题:

if (some_condition)
{
NSMutableArray *fftArray256 = [NSMutableArray array];
NSMutableArray *fftArray = [NSMutableArray array];

[ESUtils changeToFFTData:pDatas outData:fftArray];//some data will be inserted in the fftArray.
for(NSNumber *n in fftArray)
{
double d = [n doubleValue];
d *= 256;//change the scale
[fftArray256 addObject:[NSNumber numberWithDouble:d]];
}
fftObj.degree = [self getDegree:fftArray256];

[fftArray256 removeAllObjects];
[fftArray removeAllObjects];
}

如果我替换

    [fftArray256 addObject:[NSNumber numberWithDouble:d]];

    [fftArray256 addObject:@"1"];

一切都会好起来的,在最后两行之前内存会增长,但之后所有内存都会被释放。

如果不像上面那样改变,离开这个 block 后内存占用就会增加,它会无限重复,直到程序失败。 removeAllObjects 方法可以释放部分内存,但即使在离开此 block 之后,仍保留内存中的主要部分。

那么 [NSNumber numberWithDouble:d] 有什么问题吗?在我离开这个街区之前我怎样才能完全释放它们?

我知道这没有意义,否则我不会问...

最佳答案

@"1"- 是文字字符串,因为我知道它总是相同的实例

[NSNumber numberWithDouble:d] - 它将始终创建新实例

要释放内存,请尝试将代码包装在autoreleasepool

@autoreleasepool {
NSMutableArray *fftArray256 = [NSMutableArray array];
....
[fftArray removeAllObjects];
}

关于NSMutableArray 中的 ios NSNumber 未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123853/

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