【问题标题】:How do I release an object allocated in a different AutoReleasePool?如何释放分配在不同 AutoReleasePool 中的对象?
【发布时间】:2011-01-30 07:42:48
【问题描述】:

我在 Objective-C 中的内存管理有问题。假设我有一个分配对象并将对该对象的引用存储为类成员的方法。如果我第二次运行相同的函数,我需要先释放第一个对象,然后再创建一个新对象来替换它。假设函数的第一行是:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

这意味着将有一个不同的自动释放池。分配对象的代码如下:

if (m_object != nil)
    [m_object release];

m_object = [[MyClass alloc] init];
[m_object retain];

问题是运行方法最后一行时程序崩溃:

[pool release];

我做错了什么?我该如何解决这个问题?

问候
艾伦

【问题讨论】:

    标签: objective-c memory-management nsautoreleasepool


    【解决方案1】:

    首先对目标c内存管理有一个大致的了解。你在这里混淆了很多不同的东西。例如,您不必保留 m_object,因为 alloc 已经将保留计数设置为 1。通常,当您释放对象时,您不会释放 AutoReleasePool。就像我说的,查看内存管理的文档(实际上非​​常好)。

    【讨论】:

      【解决方案2】:

      自动释放池处理专门自动释放的对象

      例子:

      [object autorelease];
      

      您的程序中必须至少有一个 NSAutoreleasePool,以防某些代码尝试自动释放对象。如果这是您唯一的 NSAutoreleasePool ,那么释放池可能会导致您的问题。

      【讨论】:

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