2017-07-06 2 views
7

のXcode 9でメインスレッドチェッカーは何ですか、 私はこの私はXcodeの9のマニュアルの新機能をチェックして

enter image description here

を見つけるが、私はどのように私は新しいとこれを使用することができることは何か認識できませんでしたApple documentationからXcodeの9

+1

シンプルな[Google検索](https://www.google.com/search?q=Main+Thread+Checker)を試しましたか? – deadbeef

+1

よく解説されている解決策が見つかりません – suthar

+1

https://developer.apple.com/documentation/code_diagnostics/main_thread_checker – deadbeef

答えて

14

メインスレッドチェッカーはスウィフトとC言語 そのため、スタンドアロンのツールです バックグラウンドスレッドで、AppKit、UIKit、およびその他のAPIの無効な使用を検出します。メインスレッド 以外のスレッドでUIを更新すると、間違ったUIアップデート、視覚的な の不具合、データ破損、およびクラッシュが発生する可能性があります。

したがって、たとえば背景 スレッドでUILabeltextプロパティを変更しようとすることはできません。アップル社によると、これはのUIアップデート、視覚的欠陥、データ破損、およびクラッシュを逃した可能性があります。実際には、この時間の99%がランダムにUIアップデートと視覚的な欠陥(クラッシュではない)を見逃してしまいます。

UIKitのような不適切な使用を簡単に検出できるため、クラッシュは実際には良好ですが、開発中にランダムな視覚的欠陥を検出することは非常に困難です。そして、メインスレッドチェッカーの出番それはだ。

メインスレッドチェッカーは、バックグラウンドスレッドでUIKitdectect用途を助けるは、それが彼らにを解決することはできません。バックグラウンドスレッドで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をご覧ください。

17

スキームの診断オプションで有効/無効を切り替えることができます。 さらに、「問題の一時停止」は、これらの問題をデバッグするための快適なオプションです。セクションを確認するランタイムAPIの下で

Example

+0

良い説明、ありがとうございます –

0

メインスレッド・チェッカーはあなたが非UIスレッド

enter image description here

enter image description hereのUIメソッドを実行しているかどうかを確認するために有効になっていることを確認

関連する問題