0

我和我的同事遇到了一个我们正在尝试解决的问题。它与内存分配有关。我们的代码使用循环和 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:@","];
        }
    }

}

编辑:这不再是一个紧迫的问题,因为我们推出了我们自己版本的解析函数,所以现在代码使用更少的内存,实际上在完成后返回它使用的内存,并且解析速度稍快(整个文档(大约 10,000 行)在大约 100 毫秒内解析并转换为浮点数、放入数组等。

虽然这不是一个紧迫的问题,但我想知道为什么 NSString 的内存分配如此糟糕(至少在我们上面的实现中)。

谢谢。

4

1 回答 1

0

我还没有找到这个问题的答案,但我已经创建了一个解决方法,这比我需要的要快一些。我使用基本 C 代码和 memcpy 将我的文件解析为我需要绕过在我的设备上发生的 NSString 单独的奇怪操作。

于 2012-10-18T20:59:12.313 回答