代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

自动释放:在你吸毒的时候一直使用?

  •  4
  • Dan Rosenstark  · 技术社区  · 14 年前

    在谈论毒品的时候, the author of this blog says “就我个人而言,我喜欢在同一行中立即自动释放我所缉获的任何东西。”这与我在苹果网站和书籍中看到的所有例子完全相反,在这些例子中,自动释放只在对象必须返回且不能立即释放时才使用。总的来说,我们的想法是 autorelease 是内存密集型的,可能会破坏你的程序(虽然它使代码更干净)。从 开始iPhone3开发

    这些物体会产生有害的影响 对应用程序内存的影响 足迹。可以使用 当你真的需要的时候,不仅仅是 省去键入一两行代码。


    2 回复  |  直到 14 年前
        1
  •  2
  •   Johannes Rudolph    14 年前

    虽然这看起来很昂贵(当然与直接保留/释放相比),但我认为它甚至还没有接近一个generation mark和sweep垃圾收集器的成本。

    autorelease真正的亮点是在所有可能引发异常的情况下,没有try/catch。在这种情况下,自动释放肯定比直接释放好。

    但是,有些情况下,您应该避免自动释放(对于garabge收集的环境也是如此,您也应该尝试避免这些情况)。在运行大量次的循环中创建临时的自动释放对象就是这样一种情况,这给垃圾收集器或自动释放池带来了很大的压力。

        2
  •  3
  •   Philippe Leybaert    14 年前

    使用autorelease没有错,但是当您在循环中分配对象时,您应该始终显式地调用release。

    使用自动释放:

    for (int i=0;i<1000;i++) {
        NSString *s = [[[NSString alloc] init] autorelease];
    }
    
    // at this point, there are 1,000 unreleased string objects in memory
    

    for (int i=0;i<1000;i++) {
        NSString *s = [[NSString alloc] init];
    
        [s release];
    }
    
    // at this point, no string objects are "alive"