ios多线程之NSThread

ios多线程之NSThread

##什么是线程: 一个进程想要执行任务,必须至少得有一个线程,但是只拥有一个主线程,线程是进程的基本执行单位,一个进程的所有任务必须在线程中执行。 ###线程的分类: **串行:**一个一个的按顺序执行。 **并行:**不按顺序执行,把一个或者多个任务分配给主线程或其他的线程进行。多线程的并发执行,其实是CPU快速的在多个线程之间的切换。CPU切换的速度足够快,就会造成多线程并发执行的假象。 ####ios中的:多线程编程技术: **1:**Pthread(基本不会使用)

**2:**NSThread(每个Thread对象对应一个线程)

**3:**NSOperation(面对对象的线程技术,基于GCD来实现,是对GCD的简单封装)

**4:**GCD(是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术) ##NSThread: 多线程技术,只有在程序下载或者执行一些大的数据的下载,复杂大数据的增添改查中,才能体现它的特点,所以,我们需要一些大的数据。而大的数据最好获得的是高清大图的数据,首先在storyboard中创建 imageview: ###方式一 @interface ViewController () {

NSThread *thread_A;
}

[@property](http://my.oschina.net/property) (weak, nonatomic) IBOutlet UIImageView *imagView_1;

####数据的下载: NSURL *imageURL_01 = [NSURL URLWithString:@"http://img.ivsky.com/img/tupian/pre/201507/01/yindian_meinv-001.jpg"]; NSData *data = [NSData dataWithContentsOfURL:imageURL_01]; return [UIImage imageWithData:data]; ####创建NSThread: NSThread *thread_A = [[NSThread alloc] initWithTarget:self selector:@selector(run_A) object:nil]; thread_A.name = @"线程A"; [thread_A start]; 创建线程、执行下载任务,需要手动start才能启动。而NSThread创建的线程任务不是在主线程中的,而凡是涉及到UI的更新,都是在主线程中完成的,所以我们需要把数据的更新操作让给主线程 ###完成数据的更新: UIImage *image = [self downloadImage_one]; [self.imagView_1 performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; downloadImage_one:为对image网络url数据的下载。performSelectorOnMainThread:OnMainThread在主线程上执行。把对UI数据的更新放在主线程上,才能让UI重新渲染。 ###方式二:

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

NewThread代表开辟一个行的线程,selector方法选择器。开辟一个新的线程来执行所选中的方法。使用方式二,就可以不用手动调用start方法,他会自动调用start方法。 ###方法三: 方法一二三,很多方法大同小异,最大的区别就在于创建线程的方法.

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

self当前,performSelectorInBackground:在后台中执行选中的方法,并传入一个对象。在后台中开辟线程与performSelectorOnMainThread是相对的。

###NSThread的一些方法:

####阻塞线程 [NSThread sleepForTimeInterval:5]; 等待x秒钟。类似于GCD中的延迟调用。

####线程暂停 [NSThread sleepUntilDate:[[NSDate date] dateByAddingTimeInterval:1000]]; 阻塞到某个时间,如果给他一个未来时间,就能让这个线程暂停:

[NSThread sleepUntilDate:[NSDate distantFuture]];

####取消当前进程

[thread_A cancel];

转载于:https://my.oschina.net/zhenghaoLi/blog/741975

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值