NSObject多线程方法
1.[NSThread currentThread];可以返回当前运行得线程,num=1代表是主线程
2.新建后台线程,调度任务:
[self performSelectorInBackground:@selector(bigTask) withObject:nil];
使用performSelectorInBackground是可以修改UI的,但是强烈不建议使用
3.更新界面
使用performSelectorOnMainThread可以在主线程中执行任务
提示:NSObject对象均可以调用此方法
4.内存管理:
线程任务要包在@autoreleasepool中,否则容易引起内存泄露,而且很难发现
NSThread多线程方法
1.启动新线程
2.在主线程上更新UI
3.设置休眠时间
4.优缺点
NSOperation & NSOperationQueue多线程方法
1.NSInvocationOperation
2.NSBlockOperation
3.控制执行顺序
4.设置同时并发线程的数量
5.在主线程队列上更新UI
GCD:苹果官方推荐:基于C语言
1.获取队列的⽅方法
1)全局队列(可能会开启多条线程) :全局调度对列是由系统负责的,开发时不考虑并发线程数量问题
dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
2)串⾏行队列(只可能会开启⼀一条线程):需要创建,不能get,队列名称可以随意,但是不要使用@
dispatch_queue_t queue = dispatch_queue_create("myQueue",DISPATCH_QUEUE_SERIAL);
3)主队列 dispatch_get_main_queue();
2.GCD任务的执⾏行⽅方式——同步&异步
1)异步操作 dispatch_async 在其他线程执⾏行任务,会开启新的线程 – 异步⽅方法⽆无法确定任务的执⾏行顺序
2)同步操作
dispatch_sync 在当前在当前线程执⾏行任务,不开启新的线程 – 同步操作与队列无关 同步⽅方法会依次执⾏行,能够决定任务的执⾏行顺序 更新界⾯面UI时,最好使⽤用同步⽅方法
注意:在GCD中,同步还是异步取决于任务所在的队列,于方法名没有关系