ARC:复制方法

时间:2014-02-17 08:08:05

标签: ios iphone

我有一个页面,其中发生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工具时,我看到根本没有发布复制的元素。这可能是什么问题。我该怎么做才能释放每次复制的节点。请帮忙。

2 个答案:

答案 0 :(得分:0)

复制元素时,表示您正在为同一对象创建新指针,因此节点充当新对象。当前执行完成后,如果现在有对同一对象的新引用,它将自动释放。(如果在一个方法中,您将节点实例发送到另一个对象,另一个对象也引用节点的指针)

答案 1 :(得分:0)

你应该考虑调用update:(CXMLElement)element的地方的两件事,元素的实际所有者就是那个特定的类。尽管你在update:(CXMLElement)element中使用它,但引用计数增加1。您可以尝试以下方法

  1. 将属性xml声明为weak并声明实际创建的元素也声明为weak
  2. 不要使用update:(CXMLElement)element的任何回调,它将元素作为返回类型传递给它的实际调用者(这应该是一个保留周期)
  3. 编辑:  请尝试

     -(void)update:(CXMLElement *)element    
        {   
           passToAnotherMethod(element);
    
        }