关于iOS中内存管理的问题

时间:2011-04-02 16:21:53

标签: ios memory-management memory-leaks dealloc

我有一个关于内存管理的问题。我有一个我以前在init *方法中分配的实例变量。在我的程序的某些方面,我保留了这个对象。 在我的dealloc方法中,如果我将此对象设置为nil,它是否会被正确释放? 让我举个例子。这是A.h班:

@interface A: NSObject {
  B *bvariable;
}
-(id) init;

和他的实施:

 @implementation A

  -(id) init: { 
      bvariable= [[B alloc] init];


       /**
        *  Let say for some reason, I called   
       */   
       [bvariable retain];
   }
}

-(void) dealloc {
     bvariable = nil;
     [super dealloc];
}

我的问题是当GC在A类上调用 dealloc 时, bvrariable 会被正确解除分配吗?

我的猜测是否定的,因为我保留了这个对象,所以我必须两次调用 release 来释放该对象。将对象设置为nil将不会释放它们,因为我仍然向bvrariable对象发送消息。 但有人告诉我相反的情况。

有人可以点缀我吗?

感谢您的建议!!

2 个答案:

答案 0 :(得分:0)

  

我的问题是GC何时会打电话   关于A类的dealloc,将是   bvrariable是否可以正确解除分配?

不,

1)在iOS内存管理中没有使用GC。

2)在dealloc中,您只需将此指针设置为nil(在dealloc中无意义的事情) - 对象本身未被释放或/和解除分配。

  

我的猜测不是因为我   保留了这个对象,所以我必须打电话   释放两次以释放该对象。

右。顺便说一下,alloc之后我无法看到保留此对象的任何合理理由 - 您已声明拥有该对象。

答案 1 :(得分:0)

通常,每个以alloc / init / copy / new开头的方法都应返回一个保留对象。如果再次保留此对象,则保留计数为2.要完全释放对象,您必须释放两次。

将对象设置为nil时释放对象的故事仅适用于使用垃圾收集(GC)的情况。目前这不适用于iOS,只适用于Mac OS。