2016-09-28 45 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

相關問題