Я использую следующий код, чтобы вести то, что я хочу быть фоновым синхронизацией, но основной поток замедляется или даже останавливается, когда json получает больше 20 или поэтому записи. Что-то не так с этим кодом для фоновой операции? Что может блокировать основной поток. Благодарим вас за любые предложения.IOS: основная нить замедляется во время фоновой операции
Обратите внимание, что приведенная ниже строка выполняет функцию performSelectorOnMainThread, где приложение обрабатывает полученное JSON, которое я изменил, на другой фоновый поток, но это изменение не помогает.
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1
#define kProductsURL [NSURL URLWithString: @"http://~/getproducts.php"]
//in viewDidLoad
if(hasInternet==YES && [loggedIntoServer isEqual:@1]) {
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL: kProductsURL];
//previous line grabed data from api.
if (data) {
// [self performSelectorOnMainThread:@selector(fetchData:) withObject:data waitUntilDone:YES];//no longer doing this on main thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self fetchData:data];
});
}
});
;
} //close hasInternet, logged into server.
- (void)fetchData:(NSData *)jsonFeed {
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:jsonFeed
options:kNilOptions
error:&error];
NSMutableArray* latestProducts = [[NSMutableArray alloc] init];
//this is specific to format of JSON
if (![[json objectForKey:@“products"] isKindOfClass:[NSNull class]]) {
latestProducts = [[json objectForKey:@“products"]mutableCopy];
getProducts = latestProducts;
int size = [latestProducts count];
[self.tableView reloadData];
getProducts = [self convertFeedtoObject:latestProducts];
[self importAndSaveProducts:getProducts];//this imports and saves
self.recentlySynced=YES;
}
}
где находится основная тема? –
dispatch_get_global_queue не является основной нитью !!! –
Мне нравится то, что делает ваш метод 'fetchData:'. И как вы создаете 'kBgQueue' – marosoaie