gpt4 book ai didi

iphone - 为什么我的代码会泄露?

转载 作者:行者123 更新时间:2023-12-03 19:32:13 32 4
gpt4 key购买 nike

UPDATE2 我想我找到了泄漏的真正来源。我有一些业务对象具有我忘记释放的字符串属性。这些字符串属性是从我的自定义 xlm 节点对象复制的,在此处创建 (KGYXMLNode) 我不明白为什么在这里报告泄漏而不是我的自定义类。我的 NSString 属性是 copy 而不是 retain

更新:我认为这是 Instruments 或其他东西中的错误,或者它不再神奇地泄漏,但从 xcode 4 开始,它不再显示此泄漏。

您好,根据仪器,我在以下代码中发现了泄漏。我已经围绕某些 libxml 函数构建了一个 Objective-C 包装器,以便能够使用 xpath 解析 xml 文档,并且在这个方法中,我为自定义节点对象设置了 insideText。


-(void) SetInnerTextForNode: (xmlNodePtr) node : (KGYXMLNode *) obcNode
{
if ((node) && (node->children))
{
for (xmlNodePtr pnode = node->children; pnode != NULL; pnode = pnode->next)
{
if (pnode->type == XML_TEXT_NODE)
{
xmlChar *content = pnode->content;
NSString *innerText = [[NSString alloc] initWithUTF8String: (char *)content];
NSString *trimmedText = [innerText stringByTrimmingCharactersInSet: trimCharSet];
if (trimmedText.length > 0)
obcNode.innerText = trimmedText;
[innerText release];
break;
}
}
}
}

泄漏是NSString *innerText = [[NSString alloc] initWithUTF8String: (char *)content];。我不知道出了什么问题。

最佳答案

您不应直接访问节点的内容,而应使用xmlNodeGetContent:

        xmlChar *content = xmlNodeGetContent(pnode);
        NSString *innerText = [[NSString alloc] initWithUTF8String: (char *)content];
        NSString *trimmedText = [innerText stringByTrimmingCharactersInSet: trimCharSet];
        if (trimmedText.length > 0)
          obcNode.innerText = trimmedText;
        [innerText release];
        // you must free what xmlNodeGetContent returns!
        xmlFree(content);
        break;

关于iphone - 为什么我的代码会泄露?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124328/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com