IOS 之 多线程

IOS多线程

ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。



1、  NSThread:

调用方法如下:如果需要函数参数的话,可以通过Object传递。

1.1:[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];

 

1.2:NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];

 [myThread start]; 

1.3:  [obj performSelectorInBackground:@selector(threadMe) withObject:nil];

 

2、  NSOperation:

NSOperation也是多线程的一种,NSOpertaion有2种形式.

(1) 并发执行

       并发执行你需要重载如下4个方法

     //执行任务主函数,线程运行的入口函数

    - (void)start 

       //是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO

    -(BOOL)isConcurrent 

    - (BOOL)isExecuting

     //是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。

   - (BOOL)isFinished

   

   比如TestNSOperation:NSOperaion 重载上述的4个方法,

   声明一个NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];

  [queue addOperation:testNSoperation];

  它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API 文档。 

 

(2)非并发执行

  -(void)main

   只需要重载这个main方法就可以了。 

 

3、  GCD苹果重点推荐的开发技术

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

block代表的是要做的事情, queue则是创建新线程还是加入到主线程的队列.

dispatch_queue_t 可以分为3个队列:

1.串行队列 每次只能执行一个任务. 由dispatch_queue_create创建

2.并发队列 同时可以执行多个任务. 由dispatch_get_global_queue(0, 0) 第一个0是优先级,第二个0是保留值填0 

3.主队列 在程序的主线程中执行,用于更新UI. 由dispatch_get_main_queue()创建

分组执行

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_global_queue(0, 0), block); 组里第一个线程

dispatch_group_async(group, dispatch_get_global_queue(0, 0), block); 组里第二个线程

dispatch_group_notify(group, dispatch_get_global_queue(0, 0), block); 组里的线程都执行完了才执行它

一些其他函数

dispatch_once_t once; 结构体

dispatch_once(&once, ^{...}) //在程序的生命周期内只执行一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值