代码之家  ›  专栏  ›  技术社区  ›  casademora

是否需要释放返回的nsError对象?

  •  7
  • casademora  · 技术社区  · 15 年前

    有许多cocoa方法需要一个nserrror对象作为方法的参数,但如果存在错误,它实际上是一种将错误对象返回到调用方法的方法。是否保留此返回的对象?也就是说,在调用对象代码(返回错误的方法)中,是否需要如下代码:

      NSError *error;
      [apiCall .... error:&error];
    
      if (error){
        [*error release];
     }
    

    我在任何地方都没有看到这个,如果它确实需要被释放,这是做它的方法吗?

    3 回复  |  直到 12 年前
        1
  •  7
  •   outis    15 年前

    返回的对象通常是自动释放的。一般规则是你只打电话 auto- / release 如果你之前打过电话 copy / alloc / retain 在同一个对象上。你不会放弃引用 error 在方法调用中:

    // right
    [error code]
    // wrong
    [*error code]
    
        2
  •  6
  •   Jeff    15 年前

    阅读developer.apple.com上的内存规则 永远不要相信像“你以前叫copy/alloc/retain”这样重述它们的人——这不是规则,实际上它说的是“你通过一个方法接收了对象,并将copy、new或alloc作为名称的一部分”。同样,不要相信我,读developer.apple.com。

    至于nserrror**,那是错误的。该方法将nserrror*作为参数,即指向nserrror*的指针。它是指向nserrror*的指针,将使用来自的nserrror的地址进行填充。 在某处 你没有权利假定在哪里。

    您只能将指针传递给nserrror*—其他任何错误。

    也不应假定nserrror是自动释放的。它可以是一个单件,也可以是任意数量的替代品。你只需要知道“你没有保留它,你不需要释放它”。

        3
  •  4
  •   Ken Pespisa    15 年前

    您没有为错误分配内存,因此不需要释放它。通常,框架会向它创建的任何对象添加自动释放。