iphone - 如果我在对象仍在运行其中一个方法时释放一个对象怎么办?

时间:2010-10-21 08:17:25

标签: iphone memory

我的应用会创建一个对象。该对象将继续运行其中一种方法,假设批处理图片。

如果它的方法正在运行,并且我释放了该对象并且它被解除分配,那么iOs会自动处理该对象的方法吗?例如,自动停止运行对象的方法并避免bad_exec?

2 个答案:

答案 0 :(得分:1)

当您调用release并且引用计数达到0时,将调用对象的dealloc。就是这样。

这意味着:如果您正在一个线程上处理并且您的对象是从另一个线程发送的(或者由于其他一些不正当的原因而被发送到同一个线程)那么您应该期望未定义的行为(这可能会导致终止,通过EXC_BAD_ACCESS或者同样愉快的事情)。在这种情况下,某些东西应该保持对对象的引用(例如,NSOperation子类)。

答案 1 :(得分:0)

如果您释放一个对象,这意味着操作系统可以自由重用内存并用其他数据覆盖它。

因此,在最终版本发布之后,该对象的方法中的任何引用,对于self,ivar,getter,setter或任何其他需要此类(递归)的方法都可能崩溃,或者更糟糕的是,随机破坏其他地方使用的内存。

纯粹使用全局变量或局部变量(并且不需要从对象进一步初始化或赋值)的方法可能是安全的,但这只是伪装成实例方法的C函数或类方法。