我的同事和我正在努力解决问题。它与内存分配有关。我们的代码使用循环和componentsSeperateByString将大文档拆分为字符“\ n”。奇怪的是,它永远不会返回它所占用的所有内存。或者至少当我们检查它时,有人可以查看下面的代码来告诉我们我们可能做错了什么。
- (void)loadTagmeTest:(NSString *)selectedTargetName
{
NSString *path = [[NSBundle mainBundle] pathForResource:selectedTargetName ofType:@"tagme"];
NSString *objData = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *lines1;
NSArray *lineVertices1;
NSArray *lineNormals1;
NSArray *lineTexcoords1;
lines1 = [objData componentsSeparatedByString:@"\n"];
// Iterate through file once to discover how many vertices, normals, and faces there are
lines1 = [self getList:objData separator:@"\n"];
for (NSString * line in lines1)
{
if ([line hasPrefix:@"Verts: "])
{
lineVertices1 = [[line substringFromIndex:7] componentsSeparatedByString:@","];
}
else if ([line hasPrefix:@"Normals: "]){
lineNormals1 = [[line substringFromIndex:9] componentsSeparatedByString:@","];
}
else if ([line hasPrefix:@"TexCoords: "]){
lineTexcoords1 = [[line substringFromIndex:11] componentsSeparatedByString:@","];
}
}
}
编辑:这不再是一件紧迫的事情,因为我们推出了我们自己的解析函数版本,所以现在代码使用更少的内存,实际上返回它完成后使用的内存,并且解析起来稍微快一点(a整个文档(大约10,000行)解析并在大约100ms内被转换为浮点数,放入数组等等。
虽然这不是一个紧迫的问题,但我想知道为什么NSString的内存分配如此糟糕(至少在我们上面的实现中)。
感谢。
答案 0 :(得分:0)
我还没有找到这个问题的答案,但是我已经创造了一个解决方案,在我需要的时候更快一点。 我使用基本C代码和memcpy将我的文件解析为我需要绕过我的设备上发生的NSString单独的奇怪操作。