Objective c 如何释放在不同自动释放池中分配的对象?

Objective c 如何释放在不同自动释放池中分配的对象?,objective-c,memory-management,nsautoreleasepool,Objective C,Memory Management,Nsautoreleasepool,我对Objective-C中的内存管理有问题。假设我有一个方法,该方法分配一个对象,并将对该对象的引用存储为类的一个成员。如果我第二次运行相同的函数,我需要先释放第一个对象,然后再创建一个新对象来替换它。假设函数的第一行是: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 这意味着将有一个不同的自动释放池。分配对象的代码如下所示: if (m_object != nil) [m_object release];

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

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
这意味着将有一个不同的自动释放池。分配对象的代码如下所示:

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

m_object = [[MyClass alloc] init];
[m_object retain];
问题是程序在运行方法的最后一行时崩溃:

[pool release];
我做错了什么?我怎样才能解决这个问题

问候

Alan

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

例如:

[object autorelease];

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

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