-
네이버 지도 이용시 멀티스레딩Swift 2023. 9. 24. 23:25
DispatchQueue.global(qos: .default).async { // 백그라운드 스레드 var markers = [NMFMarker]() for index in 1...1000 { let marker = NMFMarker(position: ...) marker.iconImage = ... marker.captionText = ... markers.append(marker) } DispatchQueue.main.async { [weak self] in // 메인 스레드 for marker in markers { marker.mapView = self?.mapView } } }
오버레이의 속성은 스레드 안전성이 보장되지 않으므로 여러 스레드에서 동시에 접근해서는 안됩니다. 특히 지도에 추가된 오버레이의 속성은 메인 스레드에서만 접근해야 하며, 그렇지 않으면 NSObjectInaccessibleException이 발생합니다.
대량의 오버레이를 다룰 경우 객체를 생성하고 초기 옵션을 지정하는 작업은 백그라운드 스레드에서 수행
지도에 추가하는 작업만을 메인 스레드에서 수행하면 메인 스레드를 효율적으로 사용할 수 있습니다.
'Swift' 카테고리의 다른 글
[Swift] 이슈트래킹: Firebase에서 값이 안뜸 (원인: 값을 가져오긴 했는데 closure의 실행 과정에 대한 이해 부족) (0) 2023.10.28 Codable 프로토콜 (0) 2023.10.28 의존성 주입 (0) 2023.09.24 싱글톤 패턴 (0) 2023.09.23 메모리 구조 (0) 2023.09.23