2010-03-22 63 views
0

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

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

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

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

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

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

[pool release]; 

我在做什么错?我怎样才能解决这个问题 ?

问候
艾伦

回答

0

自动释放池处理已明确自动释放对象

例子:

[object autorelease]; 

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

2

首先得到目标c内存管理的一般理解。你在这里混淆了很多不同的东西。例如,您不必保留m_object,因为alloc已经将保留计数设置为1.另外通常在释放对象时不释放AutoReleasePool。就像我说的那样查看内存管理的文档(实际上很不错)。