织梦手机端网站字体重叠,网站页面外链怎么做,网站建设与制作石家庄,微信企业推广上一篇文章中我们大致了解了GCD的模式和方法#xff0c;在iOS开发中除了GCD之外#xff0c;还有NSThread和NSOperation两种多线程方式。 1.NSThread - a - 使用NSThread开辟多线程进行子任务处理#xff1a;类方法和初始化方法 使用类方法不需要创建对象就可以直接开辟多线程… 上一篇文章中我们大致了解了GCD的模式和方法在iOS开发中除了GCD之外还有NSThread和NSOperation两种多线程方式。 1.NSThread - a - 使用NSThread开辟多线程进行子任务处理类方法和初始化方法 使用类方法不需要创建对象就可以直接开辟多线程并发而创建NSThread对象进行开辟则需要使用 - (void)start 方法进行线程启动。 1 #import ViewController.h2 3 typedef NS_ENUM(NSInteger, ENSThreadType) {4 kNSThreadClassFunc,5 kNSThreadInitFunc,6 };7 8 interface ViewController ()9
10 end
11
12 implementation ViewController
13
14 - (void)viewDidLoad {
15 [super viewDidLoad];
16
17 [self threadWithType:kNSThreadInitFunc times:10];
18
19 }
20
21 - (void)threadWithType:(ENSThreadType)type times:(int)time{
22 for(int i 0; i time; i){
23 NSString *str [NSString stringWithFormat:测试%d, i];
24
25 switch (type) {
26 case kNSThreadClassFunc:{
27 // ①类方法
28 [NSThread detachNewThreadSelector:selector(func:) toTarget:self withObject:str];
29 }
30 break;
31 case kNSThreadInitFunc:{
32 // ②初始化方法
33 NSThread *thread [[NSThread alloc] initWithTarget:self selector:selector(func:) object:str];
34 thread.name str;
35 [thread start];
36 }
37 break;
38 default:
39 break;
40 }
41
42 }
43 }
44
45 - (void)func:(NSString*)str{
46 NSLog(% %, str, [NSThread currentThread]);
47 }
48
49 end - b - NSThread实例方法创建了NSThread对象后可以调用它的实例方法: 1 #import ViewController.h2 3 typedef NS_ENUM(NSInteger, ENSThreadObjFunc) {4 // kThreadObjFuncThread,5 kThreadObjFuncMain,6 kThreadObjFuncBackground,7 };8 9 interface ViewController ()
10 {
11 NSThread *aThread;
12 }
13 end
14
15 implementation ViewController
16
17 - (void)viewDidLoad {
18 [super viewDidLoad];
19
20 aThread [[NSThread alloc] initWithTarget:self selector:selector(func:) object:测试参考线程];
21 [aThread start];
22
23 [self threadObjFuncWithType:kThreadObjFuncMain thread:aThread times:10];
24
25 }
26
27 - (void)func:(NSString*)str{
28 NSLog(% %, str, [NSThread currentThread]);
29 }
30
31 - (void)threadObjFuncWithType:(ENSThreadObjFunc)type thread:(NSThread*)thread times:(int)time{
32
33 for(int i 0; i time; i ){
34 switch (type) {
35 case kThreadObjFuncMain:{
36 // ①主线程队列中执行同步
37 NSString *str [NSString stringWithFormat:主线程队列%d, i];
38 [self performSelectorOnMainThread:selector(func:) withObject:str waitUntilDone:YES];
39 }
40 break;
41 case kThreadObjFuncBackground:{
42 // ②后台执行并行异步
43 NSString *str [NSString stringWithFormat:后台执行%d, i];
44 [self performSelectorInBackground:selector(func:) withObject:str];
45 }
46 break;
47 // case kThreadObjFuncThread:{
48 // ③在某一线程队列执行类似于串行异步
49 // NSString *str [NSString stringWithFormat:方法%d, i];
50 // [self performSelector:selector(func:) onThread:thread withObject:str waitUntilDone:YES];
51 // }
52 // break;
53 default:
54 break;
55 }
56 }
57 }
58
59 end 转载于:https://www.cnblogs.com/kriskee/p/5368155.html