내 앱에서 다소 큰 문자열 크기 계산이 발생했습니다 (각 앱은 500ms 가량 소요되며 사용자가 내 앱에서 새로운 "페이지"로 스크롤하면 발생합니다 계산은 한 번만 실행하면되고 (동일한 데이터로 이후 실행을 위해 캐시 될 수도 있기 때문에) 페이지 당 한 번만 지연이 발생합니다.iPhone에서 백그라운드 스레드에서 문자열 크기 계산하기
어쨌든, 나는 여전히 차단하지 않습니다. 이 유형의 작업에 대한 UI, 그것은 스레드를 사용하여 비명을 지르지 만 UIKit은 다른 스레드에서 사용하도록되어 있지 않다는 것을 알고 있습니다. (NSString은 UIKit에 속하지 않지만 문자열 크기 조정 메서드는 UIKitAdditions의 일부입니다. ...)
So 어떻게해야합니까? UI를 차단하지 않고 안전하게하는 가장 좋은 방법은 무엇입니까?
이것은 일반적으로 스레딩 대신 제안 된 경로이지만 작업을 수행 할 위치, 주 대기열 또는 다른 대기열에 대한 질문은 다루지 않습니다. 주 대기열은 순차적이므로 올바르게 호출 한 경우 주 스레드에서 실행하는 것과 동일한 차단 영향을줍니다. –
필자는 개인적으로 사용하지 않았지만 적어도 문서에 따르면 반드시 차단하지는 않습니다. "NSOperation 클래스의 isConcurrent 메서드는 작업이 시작 또는 종료되는 스레드와 관련하여 동 기적으로 또는 비동기 적으로 실행되는지 여부를 알려줍니다 메서드가 호출되었습니다. 기본적으로이 메서드는 NO를 반환합니다. 즉 호출 스레드에서 작업이 동 기적으로 실행됨을 의미합니다. " –
죄송합니다. 사실 내 의견에 디스패치 대기열을 의미했습니다. 문제의 문제는 더 안전합니다 sizeWithFont를 호출하는 것이 안전합니다 : 주 스레드 이외의 다른 작업 큐 또는 디스패치 큐를 사용하여 스레딩을 수행해야하지만 주 스레드에 있어야하는지 여부는 문제가되지 않습니다. UI 스레드 또는 아닙니다. –