• 多线程


    多线程

    进程:内存里的一个程序就是一个进程,运行起来的程序就是一个进程,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,每个进程均运行在其专用且受保护的内存空间内,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

    线程:线程是指进程内的一个执行单元,也是进程内的可调度实体,一个应用至少有一个线程(主线程)(IOS中UI主线程)

    NSThread 

    1.[NSThread detachNewThreadSelector:@selector(doSomething) toTarget:self withObject:nil];

    2.NSThread* myThread = [[NSThread alloc] initWithTarget:self  selector:@selector(doSomething)  object:nil];  

       [myThread start]; 

    栗子栗子......下载图片

    -(void)downloadImage:(NSString *) url{  

        NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];  

        UIImage *image = [[UIImage alloc]initWithData:data];  

        if(image == nil){  

        }else{  

             [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES];  

        }  

    }  

    -(void)updateUI:(UIImage*) image{  

        self.imageView.image = image;  

    }  

    - (void)viewDidLoad  {  

         [super viewDidLoad];  

       // [NSThread detachNewThreadSelector:@selector(downloadImage:) toTarget:self withObject:kURL];  

         NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(downloadImage:) object:kURL];  

         [thread start];  

    }  

    NSOperation

    使用 NSOperation的方式有两种,

    一种是用定义好的两个子类:

    NSInvocationOperation 和 NSBlockOperation。

    另一种是继承NSOperation

    在.m文件中实现main方法,main方法编写要执行的代码即可。

    栗子栗子......下载图片

    - (void)viewDidLoad  

    {  

        [super viewDidLoad];  

        NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self  selector:@selector(downloadImage:)   object:kURL];  

        NSOperationQueue *queue = [[NSOperationQueue alloc]init];  

        [queue addOperation:operation];   

    }  

    -(void)downloadImage:(NSString *)url{    

        NSURL *nsUrl = [NSURL URLWithString:url];  

        NSData *data = [[NSData alloc]initWithContentsOfURL:nsUrl];  

        UIImage * image = [[UIImage alloc]initWithData:data];  

        [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES];  

    }  

    -(void)updateUI:(UIImage*) image{  

        self.imageView.image = image;  

    }  

    Grand Central Dispatch 简称(GCD)

    Serial  串行 Concurrent  并行

    在GDC中一个操作是多线程执行还是单线程执行取决于当前队列类型和执行方法,只有队列类型为并行队列并且使用异步方法执行时才能在多个线程中执行。 

    串行队列可以按顺序执行,并行队列的异步方法无法确定执行顺序。 

    UI界面的更新最好采用同步方法,其他操作采用异步方法。 

    GCD中多线程操作方法不需要使用@autoreleasepool,GCD会管理内存。

    网上的图

    栗子栗子......下载图片

    dispatch_queue_t queue =dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT);

        dispatch_async(queue, ^{

            //1.获取网址字符串

            NSString * urlString = @"http://www.bz55.com/uploads/allimg/121230/1-121230094954.jpg";

            //2.NSString->NSURL

            NSURL * url = [NSURL URLWithString:urlString];

            //3.同步下载

            NSData * data = [NSData dataWithContentsOfURL:url];

            UIImage * image = [UIImage imageWithData:data];

            dispatch_sync(dispatch_get_main_queue(), ^{

                self.view.backgroundColor = [UIColor colorWithPatternImage:image];

            });

        });

     

    参考:

    http://blog.csdn.net/totogo2010/article/details/8016129 

    http://www.cnblogs.com/wendingding/p/3806821.html

    http://www.jianshu.com/p/0b0d9b1f1f19

  • 相关阅读:
    吉特日化MES-电子批记录普通样本
    吉特日化配料系统-关于25针串口转接
    吉特仓储管理系统--元宵送开发者一份礼物-开源2018年源码
    吉特日化MES-日化生产称料基本步骤
    吉特日化MES-日化行业原料仓库所见问题汇总
    网易数据中台建设实践
    【杭研大咖说】温正湖:6年,从不会写SQL到数据库专家
    从自动化到智能化,网易杭研的AIOps探索与实践
    特征选择之经典三刀
    【杭研大咖说】王新勇:死磕云原生的“懒人”
  • 原文地址:https://www.cnblogs.com/huoran1120/p/5280475.html
Copyright © 2020-2023  润新知