多线程的三种方式:
1. NSThread
(1)实例方法(调用start方法开启多线程)
[[NSThread alloc] initWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#>]
(2)类方法
[NSThread detachNewThreadSelector:(SEL) toTarget:<#(id)#> withObject:<#(id)#>];
(3)刷新UI必须通过主线程
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];
(4)隐式开启多线程
[self performSelectorInBackground:<#(SEL)#> withObject:<#(id)#>];
2.NSOperation
加锁
//方法1
NSLock *jereh =[[NSLock alloc] init]
[jereh lock];//加锁
[jereh unlock];
//方法2
@synchronized(self){代码块}
3.GCD
1.同步都不会开辟子线程,无论是串行队列还是并行队列
2.同步就在主线程里执行,异步就会开辟子线程
3.在主线程里,同步执行+主队列(系统自己带的串行队列)=========死锁(在子线程里就不会 死锁)
4.同步执行+自己创建的串行队列(一个一个的执行)
5.同步执行+并行队列(一个一个的执行)
6.异步执行+串行队列=======开启一个子线程,而且顺序执行
7.异步执行+并行队列=======开启多个线程,而且并发执行
异步加载不能加返回值,只要有返回值就是同步的概念