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

紧跟着自动放线的是什么意思?

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

    我在看一些开源代码,并试图理解为什么作者以特定的方式做了一些事情。

    这个类是一个包装器 NSArray 使用push、pop等创建堆栈数据结构。

    一种方法是 topObject

    - (id)top {
        return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
    }
    

    什么是保留后立即自动释放?

    我最初的反应是这样可以防止分析器发出内存泄漏的警告,但是我在没有retain/autorelease的情况下进行了分析,仍然没有任何警告。

    所以我不明白在这里使用retain/autorelease。。。

    1 回复  |  直到 15 年前
        1
  •  9
  •   DarkDust    15 年前

    我们假设 top 会是这样的:

    - (id) top {
        return [stack lastObject];
    }
    

    然后想象一下:

    foo = [bar top];
    [bar removeAllObjects];
    // Do something with foo
    

    foo 会指向释放的内存。但是有了 retain autorelease 仍然指向有效的对象。