假设我想在程序的整个过程中创建新对象。我需要在启动时创建它们并在整个程序中持续运行后台任务。如果我将它们放在applicationDidFinishLaunching下的应用程序委托中,那么在程序的整个持续时间内只存在对象,还是仅存在applicationDidFinishLaunching的范围?在applicationDidFinishLaunching返回后,我的对象是否超出范围,还是继续运行后台任务?如果是这样,我如何确保在整个程序期间存在对象并继续运行后台任务?
“后台任务”正在不同的线程上运行。我在Mac OS X Snowleopard上使用带有Xcode 3.2.6的Objective-C。
答案 0 :(得分:1)
Objective-C对象的生命周期是手动控制的(假设您没有使用垃圾收集或ARC)。你不应该问整个程序的持续时间是否存在 - 相反,你应该确保每个对象的引用,无论它在哪里(主线程,后台线程)都被正确保留。请参阅basic memory management rules。
具体来说,如果使用[[MyClass alloc] init]
创建对象,则现在拥有对该对象的拥有引用(您负责最终释放)。如果然后启动一个新线程并为该线程提供对象的引用,那么该线程应该调用[obj retain]
以确保该对象将继续存在,并在[obj release]
完成对象时。{ / p>