五.GCDの高速反復
2778 ワード
GCDの高速反復は通常、forループまたはwhileループを使用して巡回します. しかし、通常のループは、メインスレッドで実行する である.ループ数が多すぎるとメインスレッドの実行に影響し、UIインタフェースのカートンを招き、ユーザーの体験を低下させる .
GCD高速反復(遍歴) フォーマット: を制御することに注意反復の注意点 高速反復はサブスレッドを使用してプライマリ・タスクを実行するが、プライマリ・スレッドも反復タスクに参加するが、呼び出される頻度はプライマリ・スレッドが実行するタスク に影響を与えるには十分ではない.プライマリ・キュー列は使用できないことに注意してください.プライマリ・スレッドも反復に関与するため、プライマリ・キュー列とプライマリ・スレッドとの間のデッドロック が発生します.が実行する順序は、固定された ではない.シリアルキューを使用すると、すべてのタスクがプライマリ・スレッドで実行され、高速反復は意味がありません. 高速反復の例:フォルダの内容を別のフォルダ に切り取る
dispatch_apply(, , )
+:反復を行う回数+:反復実行キュー+:反復を行うコード、blockにインデックスiを設定して反復 2016-05-26 22:49:22.528 01-GCD [44885:6079060] 0-----{number = 1, name = main}
2016-05-26 22:49:22.528 01-GCD [44885:6079200] 1-----{number = 2, name = (null)}
2016-05-26 22:49:22.528 01-GCD [44885:6079206] 3-----{number = 4, name = (null)}
2016-05-26 22:49:22.528 01-GCD [44885:6079201] 2-----{number = 3, name = (null)}
2016-05-26 22:49:22.529 01-GCD [44885:6079060] 4-----{number = 1, name = main}
2016-05-26 22:49:22.529 01-GCD [44885:6079200] 5-----{number = 2, name = (null)}
2016-05-26 22:49:22.530 01-GCD [44885:6079060] 8-----{number = 1, name = main}
2016-05-26 22:49:22.529 01-GCD [44885:6079206] 6-----{number = 4, name = (null)}
2016-05-26 22:49:22.530 01-GCD [44885:6079201] 7-----{number = 3, name = (null)}
2016-05-26 22:49:22.530 01-GCD [44885:6079200] 9-----{number = 2, name = (null)}
- (void)cutImage {
// 1.
NSString *fromPath = @"/Users/fanghe/Desktop/111";
// 2.
NSString *toPath = @"/Users/fanghe/Desktop/222";
// 3. ,
NSArray *fileArray = [[NSFileManager defaultManager] subpathsAtPath:fromPath];
NSLog(@"%@", fileArray);
// 4.
dispatch_queue_t queue = dispatch_queue_create("123", DISPATCH_QUEUE_CONCURRENT);
// 5.
dispatch_apply(fileArray.count, queue, ^(size_t i) {
// 6.
NSString *fullFromPath = [fromPath stringByAppendingPathComponent:fileArray[i]];
NSString *fullToPath = [toPath stringByAppendingPathComponent:fileArray[i]];
// 7.
[[NSFileManager defaultManager] moveItemAtPath:fullFromPath toPath:fullToPath error:nil];
NSLog(@"%@---%@---%@", fullFromPath, fullToPath, [NSThread currentThread]);
});
}