我正在学习很多关于内存管理的知识,但这个问题让我感到疑惑。
在类方法中,我创建了一个变量:
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;
}
我试图理解我如何能够再次预测这种情况,并且欢迎任何对阅读的参考,因为我不确定如何在寻找后找到原因。
感谢。
答案 0 :(得分:2)
TBXMLElement
不是Objective-C类 - 而是C struct
。
这意味着pieceXML
不是Objective-C对象,因此您无法向其发送任何Objective-C消息。特别是,您无法发送-release
。
答案 1 :(得分:1)
您不需要释放从辅助方法(例如childElementNamed:parentElement:
)获得的对象。仅在分配或复制时才释放。有一些例外,但这是经验法则。