2016-09-28 44 views
1

当我弹出我的viewcontroller,在它的viewWillDisappear方法中,我将viewcontroller的数据本地化为​​,并且将本地化完成,然后系统销毁viewcontroller弹出一个具有asnyc任务的viewController,它会在iOS的任务完成之前破坏它吗?

- (void)viewWillDisappear:(BOOL)animated { 

    [super viewWillDisappear:animated]; 

    // localization method 
    [self localDataToSandbox]; 
} 

- (void)localDataToSandbox { 

    if (self.buyDataSource.count > 0) { 

     NSMutableArray *arr_tmp; 

     if (self.buyDataSource.count > 20) { 
      arr_tmp = [[self.buyDataSource subarrayWithRange:NSMakeRange(0, 20)] mutableCopy]; 
     }else { 
      arr_tmp = self.buyDataSource; 
     } 

     CacheManager *manager = [CacheManager sharedManager]; 
     [manager cacheModelArray:arr_tmp toPath:[Util getTmpDirectory] withName:buy_cache]; 
    } 
} 

UPDATE

我们知道,如果vc1vc2,并vc2流行到vc1,该vc2将被系统回收。

我的问题是如果当vc2弹出到vc1,请问viewWillDisappear中的方法会中断吗?

+2

...?我不明白这个问题 – ullstrm

+1

这取决于'self'是否被任务捕获。由于您没有显示代码,我们无法回答。 – Avi

+0

@Avi我已经更新了我的问题,你的意思是如果方法捕获了“self”,它不会被销毁? – aircraft

回答

1

如果localDataToSandbox将有一个闭合/块捕获self,它会调用回到那个封闭,而在其他情况下(你的情况 - 当你不会有闭合捕捉个体经营),它会将从堆栈导航层次结构中移除,并且没有保证 localDataToSandbox将完成其实际运行时。

意思是,使用闭包将解决您的问题,自我将被捕获。

+0

我认为这不会解决问题,就像你对自己使用的某些东西有一些参考一样,你最终可能会试图访问一个零,而这将是一个没有bueno!我要么改变你做某事的方式,这样你就不会有这种情况,或者如果你必须的话,然后使用块(我同意,如果没有任何东西被访问,块会是理想的,被剔除),并引用一些不会被剔除的东西,比如单身或其他东西。 – Septronic

+0

你是对的。如果他试图从一个释放的自我中获取数据,那么如果他不会使用虚弱的自我,那么自我将是零或可能的裁判计数,但是他仍然有机会保持他的逻辑。 复制数据或使用单例可能是一种可能的解决方案。 – OhadM

相关问题