2012-09-12 4 views
0

이미지 처리를 수행하고 결과 이미지를 표시하는 응용 프로그램을 작성 중입니다. 인스턴트 메시징 (UDF)을 사용하여 사용자가 모든 이미지를 스크롤 할 수있게합니다. 이미지가 표준 JPG 또는 PNG가 아니기 때문에로드하는 데 시간이 걸립니다. 그래서 스레드를 사용하여 이미지를로드하고 뷰를 업데이트하려고합니다.무언가가 처리되어야 할 때 주 스레드에서 백그라운드 스레드에 알리는 방법

지금은 백그라운드 스레드에서 타이머를 사용하여로드해야하는 이미지가 있는지 확인합니다. 그러나 그것은 그렇게 잘 작동하지 않습니다. 주 스레드 또는 다른 제안에로드해야하는 이미지가있을 때 백그라운드 스레드에 알릴 수있는 방법이 있는지 알고 싶습니다.

미리 감사드립니다.

+0

인터넷에서 무언가를로드하는 경우 일반적으로 사용하는 클래스에는 콜백 블록이나 델리게이트와 같은 것이 있습니다. 다운로드가 완료되면 블록/위임자가 호출됩니다. – Pfitz

+0

@Pfitz 네, 일부 이미지는 인터넷에서 다운로드됩니다. 그러나 모든 이미지를 먼저 다운로드합니다. 그리고 나서 사용자가 스크롤 할 때 색인에 따라 표시 할 이미지의 일부를로드합니다. 귀하의 제안에 대해 – chancyWu

답변

0

scrollView를 제어하는 ​​클래스에서 메소드를 제공하고 'processImage'를 호출 할 수 있습니다.

dispatch_async(dispatch_get_main_queue(), ^{ [uiClass processImage:theImage] }); 

배경 객체 (이 예에서는 대리자 임) uiClass에 약한 참조를 유지해야합니다 이미지를 때 다음과 같이 백그라운드 스레드에서의 UI 클래스에 보낼 수 있습니다. 아이디어는 백그라운드에서 이미지 처리를 수행하는 것이지만 메인 스레드의 UI 클래스에 제공합니다.

+0

주셔서 감사합니다. GCD는 훌륭한 메커니즘입니다. 나는이 메커니즘을 사용하여 작업을 시도하고있다. 성능이 이전보다 향상되었습니다. – chancyWu

관련 문제