我正在研究iOS的简单OBJ解析器,我遇到了组解析的问题。我的方法非常原始,因为OBJ适用于特定的应用程序:我获取OBJ文件的内容并按组拆分并解析特定于组的字符串。目标是为每个组或所有组的对象(用户选择)返回一个对象。问题是我这样做时随机获得了EXC BAD ACCESS。起初我认为这是我的解析器中的内存泄漏,因此我使用完整内容进行测试,而不是拆分,因为OBJ解析器也支持它。也不例外,没有,它的工作原理,即使我做了一百万次(最终ipad内存融化了)。
以下是一些示例代码,用于显示我的问题所在:
NSString* path = [[NSBundle mainBundle] pathForResource:@"file"
ofType:@"obj"];
NSString* content = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:NULL];
// works
for (int i = 0; i < 100; i++) {
[parser parse:content];
}
NSArray* data = [content componentsSeparatedByString:@"delimiter"];
// not working - random EXC BAD ACCESS
for(NSString* obj in data)
{
[parser parse:obj]; // doing a for loop with an index is the same
}
// works, even though it's pointless
for(NSString* obj in data)
{
[parser parse:content];
}
因此,解析器尝试解析obj的部分会在这些地方随机抛出EXC BAD ACCESS: - 在解析器中尝试解释不同级别的nsstring时(可能是索引,名称,顶点等等) - 刚完成后完全解析当前(数组中的任何内容)nsstring并返回循环 - 解析完所有的nsstrings后,抛入main.m
没有任何细节。我测试了NSZombie以检查它是否是一个dealloc问题,什么都没有抛出,虽然我有时会得到“内存读取失败”。有时我说,因为它完全是随机的,我通常什么也得不到。
可能具有重要性的一些细节: - 我正在使用ARC,这是我工作的义务 - 根据obj文件大小,解析相当长~50-200ms - 解析是完全同步的,在这种情况下没有任何东西在线程上完成 - 内存使用量很小,在加载完整文件时,调试时没有可见的泄漏 - 你会发现它非常明显:我是objective-c的初学者
谢谢你的时间!答案 0 :(得分:0)
NSArray* data = [content componentsSeparatedByString:@"delimiter"];
OBJ文件是否真的在字符串'delimiter'上分离?或者应该
NSArray* data = [content componentsSeparatedByString:@","];
(我似乎记得用逗号分割OBJ)