码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2016-03-02 21:41:35      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

应用启动后会自动生成一个进程,该应用的大部分操作都是在这个进程完成的,生成一个进程时,后台会自动生成一个主线程,由这个主线程处理或者分配用户与应用之间的交互。所有的线程是在进程的虚拟地址空间中,各个线程是独立的,并都共享进程中的资源。

对于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

 

多线程

标签:

原文地址:http://www.cnblogs.com/homeofjunwei/p/5236286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!