のXcode 9でメインスレッドチェッカーは何ですか、 私はこの私はXcodeの9のマニュアルの新機能をチェックして
を見つけるが、私はどのように私は新しいとこれを使用することができることは何か認識できませんでしたApple documentationからXcodeの9
のXcode 9でメインスレッドチェッカーは何ですか、 私はこの私はXcodeの9のマニュアルの新機能をチェックして
を見つけるが、私はどのように私は新しいとこれを使用することができることは何か認識できませんでしたApple documentationからXcodeの9
:
メインスレッドチェッカーはスウィフトとC言語 そのため、スタンドアロンのツールです バックグラウンドスレッドで、AppKit、UIKit、およびその他のAPIの無効な使用を検出します。メインスレッド 以外のスレッドでUIを更新すると、間違ったUIアップデート、視覚的な の不具合、データ破損、およびクラッシュが発生する可能性があります。
したがって、たとえば背景 スレッドでUILabel
のtext
プロパティを変更しようとすることはできません。アップル社によると、これはのUIアップデート、視覚的欠陥、データ破損、およびクラッシュを逃した可能性があります。実際には、この時間の99%がランダムにUIアップデートと視覚的な欠陥(クラッシュではない)を見逃してしまいます。
UIKit
のような不適切な使用を簡単に検出できるため、クラッシュは実際には良好ですが、開発中にランダムな視覚的欠陥を検出することは非常に困難です。そして、メインスレッドチェッカーの出番それはだ。
メインスレッドチェッカーは、バックグラウンドスレッドでUIKit
のdectect用途を助けるは、それが彼らにを解決することはできません。バックグラウンドスレッドでUIKit
の使用が検出されたら、DispatchQueue
を使用して解決できます。 URLSession
のドキュメントが完成閉鎖がバックグラウンドスレッドで呼び出されることを述べているので、これは悪いです、メインスレッドチェッカーは、あなたがバックグラウンドでのUIKitの使用を検出するのに役立ちます
:Apple documentationから再び
、糸。
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let data = data {
self.label.text = "\(data.count) bytes downloaded"
// Error: label updated on background thread
}
}
task.resume()
ソリューション:DispatchQueue.main
を使用して、メインスレッドでUI更新を実行します。
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let data = data {
DispatchQueue.main.async { // Correct
self.label.text = "\(data.count) bytes downloaded"
}
}
}
task.resume()
解決策自体はXcodeとは関係ありません。これは言語の機能です。 Xcodeの以前のバージョンでは可能でしたが、Xcode 9以前では、問題の検出に役立つ主スレッドチェッカーはありませんでした。
@hamishが指摘しているように、さらに詳しい説明はthe WWDC videoをご覧ください。
シンプルな[Google検索](https://www.google.com/search?q=Main+Thread+Checker)を試しましたか? – deadbeef
よく解説されている解決策が見つかりません – suthar
https://developer.apple.com/documentation/code_diagnostics/main_thread_checker – deadbeef