如您所知,我将其SudzC
用作我的 xml Web 服务的 Objective-c 包装器,它被认为是最好和最快的 xml 解析器之一。在加载我的 xml Web 服务、解析它并最终将其保存到核心数据时,它会在数据库中生成大约 2500 条记录,因此它是一项大型服务。我注意到一些奇怪的事情,我在以下方法中 放置了声明的文件:SudzC
TouchXML
soap.m
NSLog
+ (CXMLNode*) getNode: (CXMLNode*) element withName: (NSString*) name {
for(CXMLNode* child in [element children]) {
if([child respondsToSelector:@selector(name)] && [[child name] isEqual: name]) {
return (CXMLNode*)child;
}
}
for(CXMLNode* child in [element children]) {
CXMLNode* el = [Soap getNode: (CXMLElement*)child withName: name];
if(el != nil) { return el; }
}
return nil;
}
并注意到它被称为2,180,000
时间,真棒数字!
并且children
上面提到的方法肯定也会被称为同一个大数,该children
方法在CXMLNode.m
文件中定义TouchXML
如下:
- (NSArray *)children
{
NSAssert(_node != NULL, @"TODO");
NSMutableArray *theChildren = [NSMutableArray array];
xmlNodePtr theCurrentNode = _node->children;
while (theCurrentNode != NULL)
{
CXMLNode *theNode = [CXMLNode nodeWithLibXMLNode:theCurrentNode];
[theChildren addObject:theNode];
theCurrentNode = theCurrentNode->next;
}
return(theChildren);
}
所以你可以想象这里发生了多少循环,但是,我运行了应用程序,并注意到我的应用程序在使用此 Web 服务并执行一些特定操作后崩溃(由于内存不足),但如果我执行这些特定操作(在我的应用程序中)不使用网络服务,我的应用程序根本不会崩溃,因为我的代码中没有内存泄漏或内存相关问题。我的要求是将该应用程序与 Web 服务一起使用,而不会发生崩溃。
任何解决此问题的建议将不胜感激。