반응형
Remote data를 가져올 때 Data(contentsOf:)를 사용하면 안되는 이유
- 일단 이 메서드는 동기적으로 작동한다는 것이 기본입니다. 따라서 현재작업중인 스레드의 모든 작업을 해당 작업을 수행하는 동안 멈추게할 위험이 있습니다. 이는 사용성에 매우 악영향을 주겠죠?
- 그럼 DispatchQueue.global().async로 감싸주면 어떨까요? 이러면 스레드 문제도 해결되었으니 Data(contentsOf:)를 사용해도 괜찮은 것일까요?
- 아예 안된다고 못박을 수는 없겠지만, 권장하지는 않습니다.
- 먼저 main 스레드를 멈추는 문제는 해결했지만 여전히 GCD의 제한된 작업스레드 중 하나를 묶는 셈이 됩니다. 이는 직접적이진 않아도 간접적으로 성능에 영향을 줍니다.
- 또한 URLSession과 달리 작업에 대한 의미있는 진단을 수행할 수 없습니다. URLSession에서는 오류가 네트워크 오류인지, HTTP 오류인지, contents 오류 인지 등을 판할 수 있는 반면 Data(contentsOf:)에서는 이를 확인할 수 없습니다.
- 출처 : https://stackoverflow.com/questions/59722670/data-contentsof-yields-nil-but-the-url-is-valid
반응형
'🍎 Apple > Question' 카테고리의 다른 글
[UIKit] dequeueReusableCell (withIdentifier:for:) vs (withIdentifier:) (2) | 2022.04.18 |
---|---|
[iOS] #selector는 무엇이며 왜 필요할까? (0) | 2022.02.07 |
[iOS] 왜 오토 레이아웃을 사용할 때는 translatesAutoresizingMaskIntoConstraints = false를 할까? (0) | 2022.01.21 |
[iOS] 왜 UI는 메인 스레드에서 다룰까? (2) | 2022.01.14 |