iOS线程-NSOperation,NSThread以及GCD
2014-01-03 17:31
316 查看
iOS开发中实现多线程有三种方式:NSThread,NSOperation和GCD。本文介绍三种方式的具体实现。
1.NSThread
初始化一个线程有两种方式:
2.NSOperation
MyOperation.m
3. GCD
关于GCD会用另一篇文章介绍,此处直接写用法
另外,这些线程不能操作UI,但是可以回调,让来执行UI方面的操作,有两种方式:
//回到主线程
//第一种方法
// [self performSelectorOnMainThread:@selector(first) withObject:self waitUntilDone:NO];
//第二种方法
dispatch_async(dispatch_get_main_queue(), ^{
_imageView.image = img;
});
1.NSThread
初始化一个线程有两种方式:
/*******NSObject的类方法**************/ [self performSelectorInBackground:@selector(secondMethod) withObject:self]; /*******NSThread,有两种方法**********/ //1.类方法 会自动运行main方法 [NSThread detachNewThreadSelector:@selector(firstMethod) toTarget:self withObject:nil]; //2.alloc 线程需要start NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(firstMethod) object:nil]; [thread start];
2.NSOperation
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; queue.maxConcurrentOperationCount = 3;//最多同时运行的线程数 for (int i=0; i<10; i++) { MyOperation *opr = [[MyOperation alloc] init];//自定义一个operation类,继承自NSOperation opr.time = i; [queue addOperation:opr]; [opr release]; }MyOperation.h
#import <Foundation/Foundation.h> @interface MyOperation : NSOperation @property (nonatomic, assign) int time; @end
MyOperation.m
#import "MyOperation.h" @implementation MyOperation @synthesize time; //只要实例化该对象并添加到队列中之后,会自动调用main方法 - (void)main { sleep(self.time); NSLog(@"%d", self.time); } @end
3. GCD
关于GCD会用另一篇文章介绍,此处直接写用法
//创建一个串行线程队列,第一个参数是队列的名字,第二个参数不知道 dispatch_queue_t opqueue = dispatch_queue_create("my operation queue", NULL); //异步执行线程,在t中执行block语句 dispatch_async(opqueue, ^{ [self first]; }); //得到一个并行线程队列,第一个参数是优先级 dispatch_queue_t opqueue2 = dispatch_get_global_queue(0, 0); dispatch_async(opqueue2, ^{ [self second]; });
另外,这些线程不能操作UI,但是可以回调,让来执行UI方面的操作,有两种方式:
//回到主线程
//第一种方法
// [self performSelectorOnMainThread:@selector(first) withObject:self waitUntilDone:NO];
//第二种方法
dispatch_async(dispatch_get_main_queue(), ^{
_imageView.image = img;
});
相关文章推荐
- [绍棠] iOS线程介绍 NSThread, NSOperation, GCD
- iOS -- 线程 还有待补全--(关于线程死锁,解决办法等。。)(NSThread、NSOperation、GCD) -- ASI/AFNetWork
- iOS-多线程--介绍NSThread和GCD及其它们的线程通讯示例
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(下)
- iOS —— NSThread、NSOperation、GCD多线程的优缺点
- iOS 多线程~NSThread、NSOperation 、GCD 技术区别
- Object C中创建线程的方法有NSThread,GCD, NSOperation
- iOS 多线程处理 ----NSThread, NSOperation,GCD
- iOS开发之多线程——NSThread、NSOperation、GCD
- iOS开发-GCD、NSThread、NSOperation的简单示例方法
- IOS中线程的处理(GCD,NSOperation,NSOperationQueue)
- iOS并发编程对比总结,NSThread,NSOperation,GCD - iOS
- iOS 多线程~NSThread、NSOperation 、GCD 技术区别~思维导图
- 关于IOS中GCD,NSThread和NSOperation的一些总结
- ios笔记-多线程相关(phread、NSThread、GCD、NSOperation)
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
- iOS多线程学习-NSThread、Cocoa NSOperation、GCD
- IOS多线程NSObject,NSThread,NSOperation,GCD