백그라운드 스레드에서 리소스의 그림을 어떻게로드 할 수 있습니까?UI 스레드에서 그림로드 중입니까?
나는 현재이 일을하고 있는데 그것은 꽤 내 UI 물건을 느리게 :
image = [NSData dataWithContentsOfFile:imageName];
나는 오히려 백그라운드 스레드에서로드 것입니다.
백그라운드 스레드에서 리소스의 그림을 어떻게로드 할 수 있습니까?UI 스레드에서 그림로드 중입니까?
나는 현재이 일을하고 있는데 그것은 꽤 내 UI 물건을 느리게 :
image = [NSData dataWithContentsOfFile:imageName];
나는 오히려 백그라운드 스레드에서로드 것입니다.
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(backgroundQueue,^{
// background process
image = [NSData dataWithContentsOfFile:imageName];
dispatch_async(mainQueue,^{
// always update GUI from the main thread
// uiimageview.image = image.... etc
});
});
를 사용할 수 있지만, 그것은 여전히 UI를 차단의 디스크로부터 5 5메가바이트 JPG를 얻을 5 dataWithContentsOfFile 순차적으로 호출하는거야, 말 JANO했다. 나는 또한 귀하의 솔루션으로 5 대기열에서 분할하여 노력했지만 같은 논리지만 NSOperationQueue와 usig하지만 여전히 둘 다 UI를 차단하고 있습니다. 이 스레드에는 스레드가 많이 있지만 좋은 솔루션을 찾을 수 없습니다. 로컬 자산/파일의 비동기 적 로딩에 대한 문서/참조를 알고 있습니까? – Mat
당신은 CGImage
를 열려면 CGDataProvider
를 사용할 수 있습니다.
예를 들어 CGImageCreateWithPNGDataProvider
을 사용할 수 있으며 데이터 제공 업체는 CFURL
을 참조합니다. 당신은 CFData
표현에 대해 비슷한 접근법을 사용할 수 있습니다.
그러면 CGImage
을 사용하거나 기본 스레드로 되돌아 가서 UIImage
표현을 만들 수 있습니다.
마지막으로 보조 스레드에서 CFData
또는 NSData
을로드 한 다음 주 스레드로 돌아가서 무엇인가를 수행 할 수 있습니다.
또한 UIImage
는 불변의 유형이며, 어떤 경우에는 캐시를 사용하는 주목할 가치가있을 수 있습니다. 동일한 표현을 여러 번로드하는 경우 해당 최적화를 비활성화하지 않도록하십시오.
GCD를 사용하여 그 라인을 감쌀 수 없습니까? –
나는 iOS에 익숙하지 않고 배우는 것에 익숙하지 않다. 예를 들어 주시겠습니까? –
아니라 내가 무엇을 의미하는 것은 또는 당신이 performSelectorInBackground (NSObject의 방법) 나는이 일을 해요 –