0

我无法弄清楚如何为需要在一段时间内保持其当前状态的实例变量管理内存,然后将其重新分配给新分配的内存。

以实例变量“importantData”为例:

-(void)Update
{
   importantData = [[self getObject] retain];
}


- (SomeObject *)getObject 
{
   SomeObject *objInstance = [[SomeObject alloc] init];
   [objInstance autorelease];  
   return objInstance;
}       

在我的实际项目中,getObject 过程位于不同的类中,但我已对其进行了简化,以表达我的观点。importantData 必须在对 Update 的调用之间保持有效。

每次调用 getObject 时,我都会分配新内存并将其分配给重要数据,对吗?我想我必须释放重要数据之前指向的内存,对吧?我不确定如何在不泄漏内存或尝试引用已释放内存的情况下正确执行此操作。谢谢!

4

2 回答 2

2

你只需要更新看起来像这样:

-(void)Update
{
   [importantData release];
   importantData = [[self getObject] retain];
}

基本上,只记得在分配新值之前释放。

于 2010-02-10T05:48:34.660 回答
1

您可以使用静态变量。

static SomeObject *importantObject = nil;

@implementation SomeObject

+ (SomeObject*)getObject {
  if (!importantObject) {
    importantObject = [[SomeObject alloc] init];
  }
  return importantObject;
}

@end

这将保留它,直到应用程序存在。但是,如果您想使其无效或重新创建它,您可以添加如下方法:

+ (void)expireObject {
  [importantObject release];
  importantObject = nil;
}

甚至

+ (void)setObject:(SomeObject*)newObject {
  [importantObject release];
  importantObject = [newObject retain];
}

您现在可以使用importantObjectinSomeObject的类和实例方法,或者通过SomeObject的类方法 getter 从其他类中获取它。

于 2010-02-10T05:03:59.213 回答