分配和释放一个类

时间:2010-12-02 11:29:46

标签: iphone ios4

我有一个控制器类X,它有IBAction实例方法,例如dosomething。

我有其他Y类进行一些计算并且委派自己。

在此方法中,dosomething创建了类Y的实例。现在应该在哪里发布Y.Is @property是唯一的解决方案。

//此操作在X类中

- (IBAction为)DoSomething的:(ID)发送方 {

Y * y = [[Y alloc] init];

// init方法在Y中实现,并且不时地调用其委托。 如果我们释放y。这将是一次崩溃。那么释放y的地方在哪里。 @property是创建一次性内存并使用它的解决方案。 是否有任何方法可以在下次创建其他对象时将其释放出来,只有当代表在一段时间后完成工作时才会销毁旧版本.//

// [y release];它崩溃了。

}

3 个答案:

答案 0 :(得分:0)

你可以做一件事,

// In the .h file
// declare like this.
Y *y;

// In the .m file

-(IBAction)dosomething:(id)sender {

   if(y== nil)
      y = [[Y alloc]init];

}

并且在dealloc方法中,您可以发布

- (void)dealloc{
  [y release];
  [super dealloc];
}

答案 1 :(得分:0)

在我看来,解决问题的最简单方法是在Y Y.delegate = nil中调用dealloc并在调用任何Y.delegate方法之前检查Y.delegate == nil。< / p>

答案 2 :(得分:0)

你说有些工作是在Y类的init方法中完成的。一些代表在工作完成之前需要Y的对象。之后你想发布Y。

在该委托中为Y设置一个属性并使其保留。一旦你的工作完成,将它释放并设置为零。

因此,在X的dosomething()方法中,您可以立即释放Y的实例。 记住这个规则,当X需要Y生存直到它的工作完成时,它只需要拥有所有权。

这正是为什么在Obj C中维护保留计数的原因。这样一个对象可以拥有多个所有者。当它的所有所有者释放对象时,只将其从内存中删除。