Swift

네이버 지도 이용시 멀티스레딩

Lyla. 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이 발생합니다. 

 

대량의 오버레이를 다룰 경우 객체를 생성하고 초기 옵션을 지정하는 작업은 백그라운드 스레드에서 수행

지도에 추가하는 작업만을 메인 스레드에서 수행하면 메인 스레드를 효율적으로 사용할 수 있습니다.