Data.init(contentsOf:) で画像ダウンロードはしてはいけない
Important
Don't use this synchronous initializer to request network-based URLs. For network-based URLs, this method can block the current thread for tens of seconds on a slow network, resulting in a poor user experience, and in iOS, may cause your app to be terminated.Instead, for non-file URLs, consider using the dataTask(with:completionHandler:) method of the URLSession class. See Fetching Website Data into Memory for an example.
https://developer.apple.com/documentation/foundation/nsdata/1413892-init
ネットワークベース[1]のURLリクエストに対して、この同期的な初期化処理は使ってはいけません。ネットワークベースのURLに対して、このメソッドは、遅いネットワーク上で現在のスレッドを数十秒間ブロックする可能性があり、結果として、ユーザ体験が低下する可能性があります。さらに iOS では、あなたのアプリを強制終了させる原因になるかもしれません。
代わりに、ファイルURLでないのであれば、 URLSession.dataTask(with:completionHandler:)
メソッド の使用を検討してください。例として、 Fetching Website Data into Memory を参照。
-
ファイルベースに対してネットワークベースという表現になっている ↩︎
例では、 Grand Central Dispatch の実装例となっているが async バージョンの API も用意されている