【iOS】mainthread について簡単に説明

【iOS】mainthread について簡単に説明

iOSにて、mainthread について説明する機会があったので超ざっくり備忘録。
 

thread ってなんだ?

まず thread について簡単にお話します。

iOSはいくつかのスレッドで並列処理を行います。
イメージが湧かない人は

iPhoneの中に何人ものオジさんがいて、一人のオジさんが一つのスレッドなのだ

と想像してください。
このオジさん達は与えられたタスクを一人一つずつ処理して、終わったらすぐまた次の処理を行うわけです。

DispatchQueue ってなんだ?

iOSにはスレッドにタスクを渡す前に、様々なタスクを受け付けて管理する DispatchQueue という機構も用意されています。

イメージが湧かない人は

オジさんに渡すタスクを受け付けて管理する受付嬢

を想像してください。

受付嬢にはそれぞれ担当する分野があり、

「あ、それは重要なんですね。では私が受け付けます。」
「おや、優先順位はどうでも構わないのですね。では私が受け付けます。」

といったように、オジさんに渡す前にタスクを管理します。

それぞれの受付嬢が受けたタスクは、優先順位通りに受付嬢の担当するオジさんに渡していきます。

mainthread ってなんだ?

担当分野によっては受付嬢もオジさんも複数人いますが、この中に唯一無二のハイパー受付嬢とハイパーオジさんがいます。
これが Main Dispatch Queu (Swiftで書くと DispatchQueue.main)mainthread になります。
彼らは唯一無二なので、DispatchQueue.main という受付嬢も1人しか存在しませんし、処理を行う mainthread というオジさんも1人しか存在しません。

そして、画面のUIに関する処理は全てこの DispatchQueue.mainmainthread で行わなければいけません。
逆をいうと、画面がカクついている場合この DispatchQueue.main という受付嬢と mainthread というオジさんがいっぱいいっぱいになっている確率が高いと断定できます。
※もちろん100%ではなく、メモリやCPUなどが他の要因で圧迫されているケースや、通信の影響で描画が遅れているケースなどもありますが。。

とはいえ、UIに関する処理だけを担当しているかというとそういうわけではないので、あしからず。