İlk defa Objective-C bloklarını ve Operation Queues kullanıyorum. Ana UI bir döndürücü gösterirken bazı uzak verileri yüklüyorum. Tabloyu verilerini yeniden yüklemesi için bir tamamlama bloğu kullanıyorum. documentation mentions olarak, tamamlama bloğu ana iş parçacığı üzerinde çalışmaz, bu nedenle tablo verileri yeniden yükler, ancak tabloyu sürüklemek gibi ana iş parçacığı üzerinde bir şey yapana kadar görünümü yeniden çizmez.Bu, bir İşlem Kuyruğu tamamlama blokunun doğru kullanımı mı?
Şu anda kullanıyorum çözüm bir gönderme sırasıdır, bu UI bir tamamlama bloğundan yenilemek için "en iyi" yoldur? @ Gcamp önerisine Başına
// define our block that will execute when the task is finished
void (^jobFinished)(void) = ^{
// We need the view to be reloaded by the main thread
dispatch_async(dispatch_get_main_queue(),^{
[self.tableView reloadData];
});
};
// create the async job
NSBlockOperation *job = [NSBlockOperation blockOperationWithBlock:getTasks];
[job setCompletionBlock:jobFinished];
// put it in the queue for execution
[_jobQueue addOperation:job];
Güncelleme , tamamlama bloğu artık GCD'nın yerine ana operasyon kuyruğu kullanır:
// define our block that will execute when the task is finished
void (^jobFinished)(void) = ^{
// We need the view to be reloaded by the main thread
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self.tableView reloadData]; }];
};
Serin, mainQueue hakkında bilmiyordum. Biraz daha temiz ve daha tutarlı bu şekilde. Teşekkürler! –
[NSOperationQueue mainQueue] ve dispatch_get_main_queue() kullanımı arasında gerçek bir fark var mı? –
Sonuç olarak, hayır. Ama onu nasıl kullandığın farklı. 'NSOperationQueue' (açıkça) 'NSOperation' ve GCD (dispatch_get_main_queue) bloğunu kullanır. – gcamp