Arxa fonda istifadəçi interfeysi obyektlərinin bölüşdürülməsini maneə törətmək

WWDC 2010 "Bloklar və Böyük Mərkəzi Göndərmə" söhbətində təqdim olunan nümunələrdən biri, bir arxa plan üzərində vaxt aparan tapşırıqları yerinə yetirmək üçün iç içə dispatch_async çağırışlarından istifadə etmək və tapşırıq bitdikdən sonra istifadəçi interfeysini əsas mövzuda yeniləmək idi.

dispatch_async(backgroundQueue, ^{
    // do something time consuming in background
    NSArray *results = ComputeBigKnarlyThingThatWouldBlockForAWhile();

    // use results on the main thread
    dispatch_async(dispatch_get_main_queue(), ^{
        [myViewController UpdateUiWithResults:results];
    });
});

Blokların içərisində "myViewController" istifadə olunduğundan, avtomatik olaraq "saxlama" alır və daha sonra bloklar təmizləndikdə "sərbəst buraxılış" əldə edəcəkdir.

Blokun 'sərbəst buraxma' çağırışı son buraxılış çağırışıdırsa (məsələn, istifadəçi arxa plan tapşırığı işləyərkən görünüşdən uzaqlaşır), myViewController dealloc metodu deyilir - ancaq arxa fonda çağırılır !!

UIKit obyektləri əsas ipdən kənarda ayrılmaq istəmirlər. Mənim vəziyyətimdə, UIWebView bir istisna yaradır.

Bu WWDC necə təqdim edilə bilər? Xüsusi olaraq UI kilidlənməsinin qarşısını almaq üçün ən yaxşı yeni yol kimi xatırlanır? Bir şeyimi itirirəm?

17
задан Ralph Marczynski 13 September 2011 в 17:15
поделиться