iOS 多线程小结

来源:互联网 发布:矩阵是什么意思 编辑:程序博客网 时间:2024/04/28 13:01

NSObject多线程方法

 1.[NSThread  currentThread];可以返回当前运行得线程,num=1代表是主线程

 

 2.新建后台线程,调度任务:

   [self performSelectorInBackground:@selector(bigTask) withObject:nil];

  使用performSelectorInBackground是可以修改UI的,但是强烈不建议使用

 屏幕快照 2014-07-05 上午9.19.29.png

 3.更新界面

  使用performSelectorOnMainThread可以在主线程中执行任务

 屏幕快照 2014-07-05 上午9.18.49.png

  提示:NSObject对象均可以调用此方法

 

 4.内存管理:

   线程任务要包在@autoreleasepool中,否则容易引起内存泄露,而且很难发现


NSThread多线程方法

1.启动新线程

 屏幕快照 2014-07-05 上午9.20.25.png

2.在主线程上更新UI

  屏幕快照 2014-07-05 上午9.52.07.png

3.设置休眠时间

  屏幕快照 2014-07-05 上午9.34.00.png

4.优缺点

  屏幕快照 2014-07-05 上午9.20.50.png


NSOperation & NSOperationQueue多线程方法

1.NSInvocationOperation

     屏幕快照 2014-07-05 上午9.39.48.png

     


     屏幕快照 2014-07-05 上午9.38.40.png

    

2.NSBlockOperation

     屏幕快照 2014-07-05 上午9.45.12.png

3.控制执行顺序

    屏幕快照 2014-07-05 上午10.02.32.png

4.设置同时并发线程的数量

屏幕快照 2014-07-05 上午9.38.48.png

5.在主线程队列上更新UI

屏幕快照 2014-07-05 上午9.50.22.png

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中,同步还是异步取决于任务所在的队列,于方法名没有关系


0 0
原创粉丝点击