배송되는 iPhone 앱에서 문제없이 dispatch_async
블록을 사용했습니다. 앱은 웹 사이트에서 가격 업데이트를 확인하고 HTML
을 파싱하고, 이에 따라 핵심 데이터 모델을 업데이트 한 다음,보고있는 테이블을 새로 고칩니다.작업이 완료되지 않은 경우 iPhone app가 dispatch_async로 중단됩니다.
그러나 최신 앱에서는 가격 업데이트 프로세스가 실행되는 동안 앱을 사용 중지 할 수 있음을 발견했습니다. 첫 번째와 두 번째 사용법의 차이점은 내가 테이블의 refreshController
(즉, tableViewController
의 풀 - 투 - 리프레시 메커니즘에 내장 된) 디스패치 블록을 호출하고 있으며 이것이 iOS7임을 알 수 있습니다.
누군가가 프로세스를 중지하려는 사용자와 같이 알려진 조건 하에서 정상적으로 중단되어야하는 방법을 제안 할 수 있습니까? 아니면이 앱을 전환하고 해당 블록을 적절하게 관리하기 위해 가로 채고 싶습니다. 제발?
좋은 배경을 블록으로 읽지 않고 읽지 않는 경우에도 이와 같은 링크를 살펴 보는 것이 기쁩니다. 감사합니다.
이
은 사용자의 편의를 위해, 내가 사용하고있어 (주로 보일러) dispatch_async 코드 : 는priceData = [[NSMutableData alloc]init]; // priceData is declared in the header
priceURL = … // the price update URL
NSURL *requestedPriceURL = [[NSURL alloc]initWithString:[@“myPriceURL.com”]];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:requestedPriceURL];
dispatch_queue_t dispatchQueue = dispatch_queue_create("net.fudoshindesign.loot.priceUpdateDispatchQueue", NULL); //ie. my made-up queue name
dispatch_async(dispatchQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:urlRequest delegate:self startImmediately:YES];
[conn start];
})
});
그냥 알고 , 그것은'dispatch_async'에서'대신'의 UIViewController __weak weakSelf = self'의 self'를 사용하는 것이 안전합니다? –
예 비동기 블록에서 자기를 사용하는 것이 안전합니다 ..하지만 U 백그라운드 스레드 블록에서 UI를 업데이트 할 수 없습니다. –
감사합니다. ~ 알아 둘만한 –