【问题标题】:Can I early-release an autorelease object?我可以提前释放自动释放对象吗?
【发布时间】:2011-02-15 17:13:30
【问题描述】:

即如果我这样做会导致对象立即被释放而不必被池释放?

[[NSArray arrayWithCapacity:100] release];

在文档中找不到关于此的明确解释。

【问题讨论】:

    标签: objective-c memory-management autorelease nsautoreleasepool


    【解决方案1】:

    当对象通常被自动释放时,它可能会崩溃。 autorelease 表示“延迟发布”,因此将发布:稍后发布。由于该对象在您手动释放时将不存在,因此您可能会由于运行时将-release 消息发送到您现在已释放的对象而崩溃。

    编辑:请注意,如果您 -retain 自动释放的对象,您必须 -release 它们:您正在取得所有权。

    【讨论】:

    • 假设(无论出于何种原因)我确实希望它立即发布。 “[[obj retain] release]”是一个有效的选项吗?
    • 并非如此。在这种情况下,您应该将整个内容包装在 @autoreleasepool { } 中,以创建和销毁发生自动释放的池。
    • 同意,把整个东西包在@autoreleasepool中
    【解决方案2】:

    我现在意识到这很愚蠢,我不应该发布我不拥有的东西。

    【讨论】:

      【解决方案3】:

      如果您不希望对象进入自动释放池,您可以手动执行allocinitWithCapabity。如果你这样做,你必须在某个时候手动release它。

      【讨论】:

        猜你喜欢
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多