【问题标题】:Objective-C memory management (alloc and autorelease)Objective-C 内存管理(分配和自动释放)
【发布时间】:2011-01-11 00:37:14
【问题描述】:

当你分配和初始化一个对象,然后想要返回那个对象,你应该如何返回它?

我有以下代码:

NSXMLDocument* fmdoc = [[NSXMLDocument alloc] initWithContentsOfURL:trackInfoUrl
    options:NSXMLDocumentTidyXML error:&err];  
return [fmdoc autorelease];

这是正确的吗?

【问题讨论】:

    标签: objective-c memory-management autorelease


    【解决方案1】:

    没错。由于您正在初始化对象,因此您有责任释放或自动释放它。

    由于创建时的保留计数为 1,并且您希望在调用方法有机会使用对象之前不将其删除,因此 autorelease 是要发送的正确消息。

    如果您已将其发送释放,则内存将立即被回收。通过发送它自动释放,内存将不会被回收,直到默认的自动释放池被耗尽,直到调用方法有机会在需要时保留对象之后才会发生。

    【讨论】:

    • 正确,但我不鼓励提及特定保留计数,因为在创建时,保留计数可能是任何数字,具体取决于内部实现细节。将保留计数视为您添加和减去的内容更具建设性,但永远不要直接查询该值。
    • @bbum,很棒的评论,改变了我的思维方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多