我的对象完成了他们的工作。他可以控制工作流程,但现在必须在创建它的对象中调用一个函数并且必须被释放。问题是这样的:
AnObject *object;
- (void)function
{
object = [[AnObject alloc] init];
[object doYourJob];
//The program continue to run next line, it don't stop here. So, I can't send a [object release] here
}
- (void)callThisWhenFinish
{
//do something
//can't call [object release] because it is in the stack and run a line of a released object
}
那么,我怎样才能释放对象的内存,我试试这个:
[object release]
或callThisWhenFinish
中发送function
。 - 失败!该程序仍然需要运行一些AnObject
行。 callThisWhenFinish
。 - 失败!我无法释放AnObject
,因为它会在函数callThisWhenfinish
完成时尝试运行下一行。callThisWhenFinish
发布通知。失败!当我发布通知时,立即致电callThisWhenFinish
,AnObject
可以运行下一行,然后发布,导致崩溃。AnObject
不会被再次调用? AnObject
使用了大量内存,必须尽快释放。还有其他想法吗?
答案 0 :(得分:4)
如果您的对象正在进行后台工作,那么在此期间让它保留自己是个好主意。这样,您不必担心在完成之前将其解除分配。您的function
方法可以在启动操作后安全地释放它,但在准备好之前不会释放它。
AnObject *object;
- (void)function {
object = [[AnObject alloc] init];
[object doYourJob];
[object release];
}
- (void)callThisWhenFinish {
//do something
}
在AnObject中:
- (void)doYourJob {
[self retain];
// enter background and call backgroundMethod
}
- (void)backgroundMethod {
// This is the method which doYourJob calls in the background to do the work
// Do some work
[delegate callThisWhenFinish];
// do whatever else needs to be done
[self release];
}
答案 1 :(得分:1)
如果你不能把它变成伊娃,为什么不能这样:
- (void)callThisWhenFinishAndRelease:(id)obj
然后你有一个指向它的指针。