나는 온 - 플라이 (on-the-fly) 방식으로 생성 된 모든 CGImage에 내용이 설정되어있는 애니메이션 된 UIView 인스턴스를 전체적으로 가지고있다. 잘 작동하지만 이미지 생성 속도가 느립니다 (1/4 초에서 1 초 정도, 즉 용납 할 수 없음).새 UIView 레이어 내용을 백그라운드 스레드에 렌더링 하시겠습니까?
그래서 저해상도 근사값을 매우 빨리 생성 (예 : 1/100 초)하고 UIView의 CALayer의 내용 (예 : view.layer.contents
)을 저해상도 이미지로 설정하고 즉시 배경 스레드를 생성하여 고해상도 버전을 생성하여 준비가 완료되는 즉시 저해상도 버전을 대체 할 수 있습니다.
이 작업을 수행하는 데있어 합리적인 방법은 무엇입니까?
내 생각에 GCD (그랜드 센트럴 디스패치)를 사용하여 백그라운드 스레드를 예약 한 다음 완료시 메시지를 다시 보내야한다고 생각했습니다. 이렇게하면 완료 메시지의 일부로 새로운 고해상도 대체 이미지를 보내는 것이 합리적일까요?
백그라운드 스레드를 취소해야하는 경우 어떻게해야합니까? 이것은 사용자가 다른 오브젝트로 페이지를 이동하는 경우 발생합니다.이 경우 현재 백그라운드 태스크를 취소하고 다른 뷰에 대해 새 태스크를 시작해야합니다. (실제로는 꽤 일반적으로 발생하므로 실제로 처리해야합니다.) CGPath, CGGradient, CGImage 등의 객체를 처리하는 중간에있을 수 있기 때문에 백그라운드 작업을 죽일 수는 없다고 생각합니다. 그걸 풀어 줘야 해. 다른 스레드가 테스트 할 수있는 스레드에서 플래그를 설정하는 몇 가지 방법은 무엇입니까? 주 스레드에서 백그라운드 스레드로 어떤 종류의 "중단"신호를 보내야합니까? 그런 다음 백그라운드 스레드가 가장 편안한 지점에서 이미지 자체의 생성을 중단하게할까요?
Watch Session 211 - [WWDC 2012] (https://developer.apple.com/videos/wwdc/2012/)에서 iOS의 동시 사용자 인터페이스를 작성합니다. 귀하의 질문에 직접적으로 부합하는 많은 정보가 있습니다. 세션 235와 238을 체크 아웃 할 수도 있습니다. –
쿨, 방금 211 번 시청을 끝냈습니다. NSOperationQueue는 길을가는 것처럼 보입니다. 감사. –
Rob mayoff 덕분에, Session 211을 본 후, 나는 UITableView 성능 문제를 해결했습니다! – vampirewalk