如题,我还是在读取那个stl文件,然后读取一个100多M得文件的时候,运行内存十分大,我使用的方式是以文本形式读取文件并按行分开存到一个NSArray,然后再拆分NSArray细分找到需要的数据转成float型在存到float数组内。。。但是在读取的时候运行内存已经超过了900M,这肯定是不行的。
请问还有什么思路换种方式去进行读取,让内存降下来。现在的情况是我再模拟器可以读出来文件,但在自己的手机上肯定是崩的。
代码如下:
float *squareVertexData;//数据集合
int faceNum;//三角片面数
NSString *fileContext = [NSString stringWithContentsOfFile:curFileName encoding:NSUTF8StringEncoding error:nil];
//声明可变数组用户存储文件的没一行数据
NSMutableArray *lineArr;
if (lineArr == nil) {
lineArr = [[NSMutableArray alloc]init];
}
[lineArr addObjectsFromArray:[fileContext componentsSeparatedByString:@"\n"]];//按行取出模型文件数据
fileContext = nil;
//删除没用的影响循环的数据
[lineArr removeObjectAtIndex:0];//删除第一行solid+文件名 数据
[lineArr removeLastObject];//删除最后一行“ ”数据
[lineArr removeLastObject];//删除倒数第二行endsolid数据
faceNum = (int)lineArr.count/7;//循环次数
squareVertexData = (float *)malloc(faceNum*24*sizeof(float));//给float数组空间
for (int i=0; i
以上,如有不清楚的,追问下我,谢谢大家。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你不需要文件全部内容同时在内存, 有个几行的"窗口"可以了.
别读到内存里就可以了
如果你的系统有对换进程管理内存的话,运行内存不够的时候会调节一部分暂时不用的内存内容到存储器,或者把部分要使用的内容添加入内存。
我记得大数组循环的时候,可以加autoreleasepool来动态释放内存,不知道你这个需求能不能用