実行ループは、文字通り動作サイクルを意味します。
その基本的な役割:プログラムの継続的な動作を維持します。
(:タッチイベント、タイマーイベント、セレクタイベントなど)のAppは、でさまざまなイベントを処理します
CPUリソースを保存、プログラムのパフォーマンスを向上させる:物事が動作したときに休息時に残り
実行ループの1.main機能
INT(メインのint ARGC、CHAR * ARGV []){ @autoreleasepool { 戻り UIApplicationMain(ARGC、ARGV、ゼロ、NSStringFromClass([AppDelegateのクラス])); } } このメイン機能では、内蔵機能UIApplicationMainは実行ループを開始しましたそのためUIApplicationMain関数は、プログラムの連続動作を維持し、戻っていません。デフォルトの開始実行ループは、メインスレッドに関連付けられています。
NSRunLoopはとても実行ループの内部構造を理解し、CFRunLoopRefのOC層のパッケージをベースに、より多くの研究CFRunLoopRefレベルのAPIを必要としています。
糸で2.RunLoop関係
各スレッドは実行ループの対応するユニークなオブジェクトがある
子は、実行ループのスレッドを作成するためのイニシアチブをとる必要があり、自動的に作成された実行ループのメインスレッドを
使用すると、最初のスレッドの終了時に破壊され得るとき実行ループが作成され
、対応するサブスレッドを得ることを最初の呼び出しが直接アクセスする実行ループ電流や保存、後続の呼び出しに対応するスレッドを作成することになる場合、遅延ロードされ自体実行ループ(すなわち、currentRunLoop)
3.RunLoop取得
#pragmaマーク-実行ループ - (ボイド)touchesBegan:(NSSet <UITouch *> *)はwithEventを触る:(たUIEvent *)イベント{ // APIで-OC言語 // メインスレッドに対応する01の目的は、実行ループ取得 * = NSRunLoop mainRunloopを[ mainRunLoop NSRunLoop]; // 02現行オブジェクト取得実行ループ NSRunLoop * currentRunLoop = [NSRunLoopはcurrentRunLoop] のNSLog(@ " %P ---- P-%" 、mainRunloop、currentRunLoop); // C言語API // プライマリ01循環 CFRunLoopRef mainRunloopRef = CFRunLoopGetMain(); // 02現在の動作サイクル CFRunLoopRef currentRunloopRef = CFRunLoopGetCurrent()。 NSLog(@ " %P ---%のP " 、mainRunloopRef、currentRunloopRef)。 // 转化 のNSLog("@ %のP ----%のP " 、mainRunloop.getCFRunLoop、mainRunloopRef)。 }
印刷結果:
2019 - 09 - 18 15:31:31.176193 + 0800 NSCach [ 60622:1117017 ] 0x60000184c060 --- 0x60000184c060 2019 - 09 - 18 15:31:31.176302 + 0800 NSCach [ 60622:1117017 ] 0x600000050600 --- 0x600000050600 2019 - 09 - 18 15:31:31.176362 +0800 NSCach [ 60622:1117017 ] 0x600000050600 ---- 0x600000050600
図から分かるように、現在のサイクルの主な動作サイクルは、現在最後の行で見ることができる同じ実行ループを実行して、OC取得した実行ループの実行ループとCは互いにに変換することができます。