1 #import "ViewController.h"
2
3 @interface ViewController ()
4
5 @end
6
7 @implementation ViewController
8
9 - (void)viewDidLoad {
10 [super viewDidLoad];
11 // Do any additional setup after loading the view, typically from a nib.
12 }
13 //NSOperation的子类NSInvocationOperation
14 //NSOperation 是一个抽象类(NSURLSession也是抽象类,用来封装子类,并不直接调用),与多线程没有关系,它是数据模型,保存代码段和数据
15 - (IBAction)invocationOperation:(id)sender {
16 NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loopIn) object:nil];
17 //执行操作
18 [invocationOp start];
19
20
21
22 }
23 -(void)loopIn
24 {
25
26 for (int i = 0; i < 1000; i++) {
27 //NSLog(@"a");
28 NSLog(@"%@",[NSThread currentThread]);
29 }
30 }
31 - (IBAction)blockOperation:(UIButton *)sender {
32
33 NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
34 //需要在线程里执行的内容
35 for (int i = 0; i < 8; i++) {
36 NSLog(@"%@",[NSThread currentThread]);
37 }
38 }];
39 [blockOp start];
40
41 }
42 //线程队列
43 - (IBAction)operationQueue:(id)sender {
44 NSOperationQueue *queue = [[NSOperationQueue alloc] init];
45 //可以创建队列后,设置最大的并发数
46 queue.maxConcurrentOperationCount = 2;
47 //循环添加一百个NSOperation
48 for (int i = 0; i < 100; i++) {
49 NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
50 NSLog(@"%@",[NSThread currentThread]);
51 }];
52 //添加操作到线程队列中,添加后自动执行,不需要start
53 [queue addOperation:blockOp];
54 }
55
56 }
57 - (IBAction)invocationQueue:(id)sender {
58 NSOperationQueue *queue = [[NSOperationQueue alloc] init];
59 queue.maxConcurrentOperationCount = 2;
60 for (int i = 0; i < 100; i++) {
61 NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(mengdefeng) object:nil];
62
63 [queue addOperation:invocationOp];
64 }
65
66
67
68 }
69 //输出当前线程
70 -(void)mengdefeng
71 {
72 NSLog(@"%@",[NSThread currentThread]);
73 }
74 //线程的优先级
75 - (IBAction)queuePriority:(id)sender {
76 NSOperationQueue *queue = [[NSOperationQueue alloc] init];
77 //设置最大并发数
78 queue.maxConcurrentOperationCount = 1;
79 for (int i = 0; i < 100; i++) {
80
81 NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{
82 NSLog(@"1");
83 }];
84 NSBlockOperation *blockOp2 = [NSBlockOperation blockOperationWithBlock:^{
85 NSLog(@"2");
86 }];
87 //设置操作的优先级
88 blockOp1.queuePriority = NSOperationQueuePriorityVeryLow;
89 blockOp2.queuePriority = NSOperationQueuePriorityVeryHigh;
90 [queue addOperation:blockOp1];
91 [queue addOperation:blockOp2];
92 }
93
94
95 }
96 - (void)didReceiveMemoryWarning {
97 [super didReceiveMemoryWarning];
98 }
99
100 @end