我有一个页面,其中发生autorefresh并调用方法。我在该方法中复制了CXMLELement并使用它。我的项目属于ARC。
(void)update:(CXMLElement)element
{
CXMLElement *node = [element copy];
passToAnotherMethod(node);
}
(或)
(void)update:(CXMLElement)element
{
self.xml = [element copy]; // xml is a strong propery in class which will be used in other methods
}
当我使用Allocations工具时,我看到根本没有发布复制的元素。这可能是什么问题。我该怎么做才能释放每次复制的节点。请帮忙。
答案 0 :(得分:0)
复制元素时,表示您正在为同一对象创建新指针,因此节点充当新对象。当前执行完成后,如果现在有对同一对象的新引用,它将自动释放。(如果在一个方法中,您将节点实例发送到另一个对象,另一个对象也引用节点的指针)
答案 1 :(得分:0)
你应该考虑调用update:(CXMLElement)element
的地方的两件事,元素的实际所有者就是那个特定的类。尽管你在update:(CXMLElement)element
中使用它,但引用计数增加1。您可以尝试以下方法
weak
并声明实际创建的元素也声明为weak
update:(CXMLElement)element
的任何回调,它将元素作为返回类型传递给它的实际调用者(这应该是一个保留周期)编辑: 请尝试
-(void)update:(CXMLElement *)element
{
passToAnotherMethod(element);
}