代码之家  ›  专栏  ›  技术社区  ›  Brad Cupit Regan

目标c苹果文档中的内存泄漏?

  •  0
  • Brad Cupit Regan  · 技术社区  · 14 年前

    我只是在学习目标C,所以我可能遗漏了一些东西,但是下面的代码是一个漏洞,对吧?

    取自 apple's docs

    - (NSString*) title {
        return [[title retain] autorelease];
    }
    
    - (void) setTitle: (NSString*) newTitle {
        if (title != newTitle) {
            [title release];
            title = [newTitle retain]; // Or copy, depending on your needs.
        }
    }
    

    getter保留和自动释放(彼此取消),但setter也保留。这会阻止引用计数达到0,对吧?我错过了什么?

    2 回复  |  直到 14 年前
        1
  •  2
  •   David Gelhar    14 年前

    您缺少的(因为示例中没有显示)是 release 对于对象的所有保留属性 dealloc

        2
  •  0
  •   Brad Cupit Regan    14 年前

    啊,如果我在文档中读得更远的话,苹果解释道:

    因为从get访问器返回的对象是在当前作用域中自动释放的,所以如果属性值发生更改,它将保持有效

    当在getter之后调用setter时,retain/autorelease非常有用,因为setter会释放旧值。