您的位置:首页 > 移动开发 > IOS开发

IOS 之 多线程

2013-10-24 21:08 423 查看


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, ^{...}) //在程序的生命周期内只执行一次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: