iOS整理 -- 多线程之NSThread
2015-09-09 11:59
597 查看
多线程 —- NSThread
3种创建线程的方式 : NSThread , NSOperation , GCD1> NSThread 有两种直接创建方式:
实例方法:
(id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
类方法:
(void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
[code]/** * 开辟线程 * * @param SEL 监听实现方法 * @param target selector消息发送的对象 * @param object 传输给target的唯一参数,可以是nil */ // 实例方法 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadAction) object:nil]; // 类方法 [NSThread detachNewThreadSelector:@selector(threadAction) toTarget:self withObject:nil]; // 开启线程 [thread start];
2> 不显式创建线程的方法: 开启后台执行的任务方法
用NSObject的类方法 performSelectorInBackground:withObject: 创建一个线程:
[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
3>线程间通讯: 在后台线程通知主线程执行任务
performSelectorOnMainThread:(SEL) withObject:(id) waitUntilDone:(BOOL)
performSelectorOnMainThread是NSObject的方法,除了可以更新主线程的数据外,还可以更新其他线程的比如:
用:performSelector:onThread:withObject:waitUntilDone:
4>线程休眠(延迟时间)
[NSThread sleepForTimeInterval:3];
5>线程跟踪 (当前的执行线程)
[NSThread currentThread];
使用NSThread时,开启线程 和 关闭线程 都需要手动
[thread start] 手动启动
[thread start] 手动关闭
这里是一个简单的NSThread的应用小Demo,简单介绍了NSThread的基本使用.
首先,在storyBoard里面拖拽了一个UIIMageView控件,和一个UIButton控件,
接下来,就是代码的实现部分,由于功能简单,只是使用NSThread的创建,以及一些方法的实现.
[code]#import "ViewController.h" #define kUrl @"http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 下载图片,完成之后通知刷新UI NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(downloadImageWithUrl:) object:kUrl]; [thread start]; } - (void)downloadImageWithUrl:(NSString *)url { // NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; NSURL *URL = [NSURL URLWithString:url]; NSData *data = [[NSData alloc] initWithContentsOfURL:URL]; UIImage *image = [[UIImage alloc] initWithData:data]; if (image != nil) { // 图片下载成功 [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES]; } } - (void)updateUI:(UIImage *)image { self.imgView.image = image; } #pragma ---------------------------------------------------------------- - (IBAction)click:(UIButton *)sender { // NSThread // 开辟线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadAction) object:nil]; // 开启线程 [thread start]; } - (void)threadAction { for (int i = 0; i < 10; i++) { NSLog(@"%@ ------- %d",[NSThread currentThread],i); } } @end
实现效果:
相关文章推荐
- IOS图形绘制
- ios开发,真机调试报The executable was signed with invalid entitlements.错误
- iOS学习笔记-核心动画
- iOS调用程序外地图导航
- ios 播放声音文件
- ios 本地存储之NSUserDefaults
- ios- 音乐播放器(1)
- 给学习iOS开发同学的建议
- 零基础学iOS开发
- IOS中Json解析的四种方法
- iOS测试总结
- 给学习iOS开发同学的建议
- (译文)IOS block编程指南 4 声明和创建blocks
- IOS之NSSTRING
- Xamarin.iOS推送deviceToken获取
- iOS开发-------手写一个数据持久化(Coredata)的类
- ios开发介绍
- iOS 处理键盘遮挡TextField、TextView问题
- 截图功能实现
- (译文)IOS block编程指南 3 概念总览