该对象何时解除分配?

时间:2017-01-03 23:12:28

标签: objective-c memory-management

我有这段代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    [[[PPFormEngine alloc] init] downloadAndCacheFormDataIfNeeded];

    return YES;
}

我正在使用ARC。

任何人都知道系统如何处理PPFormEngine对象? 在我们从该方法返回后再自动释放后,该对象是否会存在几秒钟?

2 个答案:

答案 0 :(得分:3)

假设downloadAndCacheFormDataIfNeeded是异步的 - 立即返回并启动后台任务以进行下载 - 那么PPFormEngine实例的生命周期完全是该类的实现细节。< / p>

如果它在下载过程中对自己有强烈的引用,它会坚持下去。如果没有,它将被迅速解除分配;或者在downloadAndCacheFormDataIfNeeded之后立即或者如果它恰好落入自动释放池中。

无论如何,最安全的实现将在下载完成时设置为nil的实例变量中保留强引用。希望PPFormEngine有某种回调,所以你知道什么时候会把参考文献弄清楚。

答案 1 :(得分:2)

ARC应该添加对release的调用,以便在到达return YES的调用之前取消分配对象。所以不,它在方法返回后不会再存在几秒钟。在方法返回后,它不会存在任何秒数。

现在,如上所述,我不知道downloadAndCacheFormDataIfNeeded方法的实现。如果其实施保留self,直到下载和缓存完成,那么就不会有问题。