释放变量时无效的接收器类型

时间:2011-05-13 04:41:04

标签: iphone ios ios4 memory-management

我正在学习很多关于内存管理的知识,但这个问题让我感到疑惑。

在类方法中,我创建了一个变量:

TBXMLElement *pieceXML = [TBXML childElementNamed:@"piece" 
                                parentElement:rootElement];

并在方法结束时释放它:

[pieceXML release];

但我收到错误:Invalid receiver type 'TBXMLElement *'

childElementNamed:parentElement:的实施在

之下
+ (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement{
    TBXMLElement * xmlElement = aParentXMLElement->firstChild;
    const char * name = [aName cStringUsingEncoding:NSUTF8StringEncoding];
    while (xmlElement) {
        if (strlen(xmlElement->name) == strlen(name) && memcmp(xmlElement->name,name,strlen(name)) == 0) {
            return xmlElement;
        }
        xmlElement = xmlElement->nextSibling;
    }
    return nil;
}

我试图理解我如何能够再次预测这种情况,并且欢迎任何对阅读的参考,因为我不确定如何在寻找后找到原因。

感谢。

2 个答案:

答案 0 :(得分:2)

TBXMLElement不是Objective-C类 - 而是C struct

这意味着pieceXML不是Objective-C对象,因此您无法向其发送任何Objective-C消息。特别是,您无法发送-release

答案 1 :(得分:1)

您不需要释放从辅助方法(例如childElementNamed:parentElement:)获得的对象。仅在分配或复制时才释放。有一些例外,但这是经验法则。