Ios ARC:复制方法

Ios ARC:复制方法,ios,iphone,Ios,Iphone,我有一个页面,其中会发生自动刷新并调用一个方法。我在该方法中复制并使用CXMLELement。我的项目正在进行中 (void)update:(CXMLElement)element { CXMLElement *node = [element copy]; passToAnotherMethod(node); } (或) 当我使用分配工具时,我看到被复制的元素根本没有被释放。这里可能有什么问题。我应该如何释放每次复制的节点。请提供帮助。当您复制元素时,意味着您正在为同一对象创建新指针,因此

我有一个页面,其中会发生自动刷新并调用一个方法。我在该方法中复制并使用CXMLELement。我的项目正在进行中

(void)update:(CXMLElement)element
{
 CXMLElement *node = [element copy];
 passToAnotherMethod(node);
}
(或)


当我使用分配工具时,我看到被复制的元素根本没有被释放。这里可能有什么问题。我应该如何释放每次复制的节点。请提供帮助。

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

两个应该考虑的地方:<代码>更新:(CXMLILL)元素< /代码>,元素的实际所有者是该特定类。即使在
update:(cxmlement)元素中使用它,引用计数也会增加一。您可以尝试以下方法

  • 将属性xml声明为
    weak
    ,并将实际创建它的元素也声明为Declare
    weak
  • 不要使用来自
    update:(cxmlement)元素的任何回调,该元素将元素作为返回类型传递给其实际调用方(这将形成一个保留周期)
  • 编辑: 请试一试

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

    在这行代码之后,您是如何使用“节点”的?请您包含此方法的所有代码。仅仅向我们展示这一行并没有真正的帮助,就其本身而言,这只是一行并不重要的代码。我将节点传递给另一个方法,在其中解析它。在不同的类中有两个实现,其中1。我将把节点传递给另一个方法2。在这里,我分配一个强变量指针,然后在其他方法中使用。如果我不进行复制,那么我会得到一个crashBut,因为某种原因,我没有看到节点被释放。所以,内存一直在增加。节点是从其他地方引用的吗?如果不是从其他地方引用的,为什么要复制?可以再给我一些代码片段吗?谢谢。传递给update方法的元素也不会被所有者保留。它只是从服务器获取数据,转换成XML并将其发送到update方法。由于此方法在自动刷新期间每次都被调用,因此我认为它会造成泄漏。在自动刷新之前是否尝试手动设置element=nil的值?我无法控制该值,这是一个调用update方法的框架。我仍然不明白为什么ARC不能处理这个问题。但是如果我们在不复制元素的情况下传递到另一个方法,那就是崩溃。我不知道为什么它会崩溃,那么你可以尝试(注意*before元素)(void)update:(cxmlement*)元素{cxmlement*node=element;passToAnotherMethod(node);}
     -(void)update:(CXMLElement *)element    
        {   
           passToAnotherMethod(element);
    
        }