Iphone 类的分配和释放

Iphone 类的分配和释放,iphone,ios4,Iphone,Ios4,我有一个控制器类X,它有IBAction实例方法,比如dosomething 我有另一个Y类,它做一些计算,并有自己的代理 在这个方法中,dosomething创建了一个类Y的实例。现在Y的实例应该发布在哪里,@property是唯一的解决方案吗 //这个动作在X类中 -(iAction)dosomething:(id)发送方 { Y*Y=[[Y alloc]init] //init方法是在Y中实现的,它做一些工作,同时它的委托也被不时地调用。 如果我们释放y,那将是一个崩溃。那么释放y的位置在

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

我有另一个Y类,它做一些计算,并有自己的代理

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

//这个动作在X类中

-(iAction)dosomething:(id)发送方 {

Y*Y=[[Y alloc]init]

//init方法是在Y中实现的,它做一些工作,同时它的委托也被不时地调用。 如果我们释放y,那将是一个崩溃。那么释放y的位置在哪里。@property是通过创建一个时间内存并使用它的解决方案吗。 只有在下次创建其他对象时,才有可能在代理在一段时间后完成其工作时销毁旧的对象,是否有任何方法可以在此处释放该对象//

//这是一次撞车

}你可以做一件事

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

// In the .m file

-(IBAction)dosomething:(id)sender {

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

}
在dealoc方法中,您可以释放

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

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

你说在类Y的init方法中完成了一些工作。其中一些委托需要Y的对象,直到工作完成。之后你想释放Y

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

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


这就是为什么在Obj C中维护retain count,这样一个对象可以有多个所有者。当其所有所有者释放对象时,只有其从内存中删除。

如果多次调用此方法—(iAction)dosomething:(id)发送者。y在那个时候不会为零,所以不是因为在该方法上点击几次就不能同时创建新实例。y类中有n个代理,所以我认为将其保留在代理中是不可行的。实际上这并不重要。。每个代理都可以在对象上持有保留。。因此,重新计数将等于委托计数。随着所有的释放。。最后该对象将被释放。Hi ashish。只有几个语义问题:一个类只分配一次,在Objective-C运行时从内存中取出之前,它不会被“释放”或以其他方式释放。所以,您真正想知道的是对象的分配和释放,而不是类。在其他语言中(特别是那些为类a原型建模的语言),这种区别并不重要,但在Objective-C中,它非常重要:类也是一个对象,它管理自身对象的特性。嗨,乔纳森,谢谢。我有一些疑问,如果类是以这样的方式创建的,它在其中有它的对象,并且类说Y本身是其他类的对象,那么现在就有必要释放类Y。当在X中创建和销毁多个对象时。