2016-09-28 9 views
1

viewcontrollerが出たときには、の方法で、のデータを​​にローカライズし、ローカライズを完了してシステムを終了させますviewcontrollerasyncタスクを持つ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

私たちが知っているように、vc2からvc1プッシュ、およびvc1からvc2ポップ場合、vc2はシステムによってリサイクルされます。

私の質問はvc2vc1にポップすると、の方法は中断しますか?

+2

...?私はこの質問を理解していません – ullstrm

+1

それは 'self'がタスクによって捕捉されているかどうかによって異なります。コードを表示していないので、答えられません。 – Avi

+0

@Avi私は自分の質問を更新しました。「自己」がその方法で取り込まれれば、それは破壊されないでしょうか? – aircraft

答えて

1

localDataToSandboxselfをキャプチャクロージャ/ブロックを持っている希望の場合、他の場合には一方で、それが戻ってその閉鎖に呼び出されます(お使いの場合 - あなたは閉鎖が自己をキャプチャすることを持っていないとき)、それはですがスタックナビ階層からが削除されており、 localDataToSandboxが実際の実行時間を終了する保証はありません。

意味は、閉鎖を使用すると問題が解決し、自己となります。

+0

私はそれが問題を解決するとは思わない、あなたが自己で使用した何かへの参照を持っているかのように、あなたは無関係にアクセスしようとする可能性があります。私は、あなたが何かをやっているやり方を変えて、そういう状況にならないようにするか、そうしなければならない場合は、ブロックを使用します(そして、私は同意します。シングルトンや何かのように、何も言及されていないものへの参照を使って)。 – Septronic

+0

あなたは正しいです。彼が割り当てられていない自己からデータにアクセスしようとしている場合、弱い自己を使用しない場合、自己はゼロになるか、または可能なリファレンスカウントになりますが、彼はまだ彼のロジックを維持する機会があります。 データをコピーするかシングルトンを使用する方法が考えられます。 – OhadM

関連する問題