多线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。
应用启动后会自动生成一个进程,该应用的大部分操作都是在这个进程完成的,生成一个进程时,后台会自动生成一个主线程,由这个主线程处理或者分配用户与应用之间的交互。所有的线程是在进程的虚拟地址空间中,各个线程是独立的,并都共享进程中的资源。
对于cpu同一时间内,只能执行一条线程,多条线程并行执行(cpu在多条线程之间不断切换,导致认为cpu同时处理多条进程的假象);cpu会因为线程的数量多,导致cpu负担大,导致cpu发热。
多线程的优点:提高程序执行率;能适当提高资源利用率
主线程 显示和刷新UI界面、处理UI事件
子线程 处理耗时的操作[NSThread sleepForTimeInterval:[ta intValue]];、不能用来刷新UI
以下是利用多线程实现多张图片加载
#import "SixImageViewController.h"
#define kUrl @"http://www.pptbz.com/pptpic/UploadFiles_6909/201212/2012120707020691.jpg"
@interface SixImageViewController()
{
NSMutableArray *threadArray;
UIImage *image;
}
@end
@implementation SixImageViewController
-(void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.edgesForExtendedLayout = UIRectEdgeNone;
int imageIndex = 200;
threadArray = [NSMutableArray array];
for (int i = 0; i < 3; i++) {
for (int y = 0; y < 2; y++) {
UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(10+200*y,10+200*i, 200, 200)];
imageView.backgroundColor = [UIColor colorWithRed:1.000 green:0.649 blue:0.796 alpha:1.000];
[self.view addSubview:imageView];
imageView.tag = imageIndex++;
}
}
for (int i = 0; i < 6; i++) {
NSThread *tt = [[NSThread alloc]initWithTarget:self selector:@selector(thread:) object:@(i)];
[threadArray addObject:tt];
[tt start];
}
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
for (NSThread *tt in threadArray) {
if (tt.isFinished == YES) {
}else{
[tt cancel];
}
}
}
-(void)thread:(NSNumber *)index{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:kUrl]];
image = [UIImage imageWithData:data];
[NSThread sleepForTimeInterval:[index intValue]];
if ([NSThread currentThread].isCancelled == YES) {
[NSThread exit];
}
[self performSelectorOnMainThread:@selector(upDateUI:) withObject:index waitUntilDone:YES];
}
-(void)upDateUI:(NSNumber *)index{
for (int i = 0; i < 6; i++) {
UIImageView *imageView = [self.view viewWithTag:200 +[index intValue]];
imageView.image = image;
}
}
@end
以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章