iOS 开发笔记(线程)

 //ios 多线程的实现方法

    

    //1.runtime 实现多线程

    

    //后台运行 某种方法

//    [self performSelectorInBackground:@selector(syncLoadImage) withObject:Nil];//运行时编程的一种方式

    

    //2.NSThread  线程类实现多线程

    

    /*

     *优点:1.最轻量级(CPU占用少) 2.最容易控制

     *缺点:1.太繁琐 2.可读性差

     */

    

//    NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];

//    

//    thread.name = @"name"; // 不会体现出来

//    

//    //开始线程

//    

//    [thread start];


    

    //3.NSOperation

    //OC层面的线程管理类

    //优点:1.不需要关心线程同步,线程控制

    //2.引入一个线程池/线程队列的概念

    

    //1.

//    NSInvocationOperation * operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(syncLoadImage) object:Nil];

//    

//    [operation start];

    

    //2.

    

//    NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{

//        

//        NSLog(@"========");

//        [NSThread sleepForTimeInterval:2];

//        NSLog(@"111111");

//        

//    }];

//    

//    [blockOperation start];

    

    //3.线程池/线程队列   管理内存的所有线程

    // 当一个线程执行完毕,将该线程挂起

    // 如果有一个新任务,利用挂起的线程直接执行

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

    

    //添加一个线程

//  1.  [queue addOperation:添加一个队列]

    

    //2.

//    [queue addOperationWithBlock:^{

//        NSLog(@"*******");

//    }];

//    

//    [queue addOperationWithBlock:^{

//        NSLog(@"123456789");

//    }];

//    

//    [queue addOperationWithBlock:^{

//        NSLog(@"哈哈哈");

//    }];

    

    //GCD

    

    

    //1.产生一个队列(串行(主队列并行)

    

    

    //获取主队列

    dispatch_queue_t   mainQueue = dispatch_get_main_queue();

    

    //在队列里运行方法

    

    //第一个参数:在哪个队列里运行

    //第二个参数:Block块里面写需要运行的方法

    

//    dispatch_async(mainQueue, ^{

//        

//        for (int i  = 0; i < 10000; i++) {

//            NSLog(@"%d",i);

//        }

//        

//    });

//    

//    

//    

//    dispatch_async(mainQueue, ^{

//        

//        for (int i  = 0; i < 10000; i++) {

//            NSLog(@"%d",i);

//        }

//        

//    });

    

    //2.获取全局队列(并行队列)

    

    //第一个参数:选定全局队列的优先级:/普通//后台

    //第二个参数:苹果还没想好

    

    dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ,0);

//

//    dispatch_async(global, ^{

//        

//        for (int i  = 0; i < 10000; i++) {

//            NSLog(@"%d",i);

//        }

//        

//    });

//    

//    

//    

//    dispatch_async(global, ^{

//        

//        for (int i  = 10000; i > 1; i--) {

//            NSLog(@"%d",i);

//        }

//        

//    });

    

    //自定义  队列

    

    //第一个参数:队列的名字

    //第二个参数:队列的属性

    

//    static dispatch_once_t onceToken;

//    dispatch_once(&onceToken, ^{

//        要执行的线程

//    });

    

    dispatch_queue_t  queue = dispatch_queue_create("liuxin", DISPATCH_QUEUE_CONCURRENT); //并行

    

    dispatch_queue_t queueSerial = dispatch_queue_create("liuxin2", DISPATCH_QUEUE_SERIAL); //串行

//

//    dispatch_async(global, ^{

//        

//        NSURL * url = [NSURL URLWithString:@"http://img6.ngacn.cc/attachments/mon_201402/01/-447601_52ebef52f03dc.jpg"];

//        

//        NSData * data = [NSData dataWithContentsOfURL:url];

//        UIImage * image = [UIImage imageWithData:data];

//        

//        //在全局队列中转到主队列执行UI操作

//        dispatch_async(mainQueue, ^{

//            

//            self.imageView.image = image;

//            

//        });

//        

//        

//        NSLog(@"1111");

//        

//    });

    

    //GCD高阶用法

    //1.使代码只运行一次(单例时使用 保证线程安全)

    

//    static dispatch_once_t onceToken;

//    dispatch_once(&onceToken, ^{

//        NSLog(@"");

//    });

//    

//    //2.让代码等待一段时间在执行dispatch_af 回车 就出现如下代码块

//    

//    double delayInSeconds = 2.0;

//    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

//    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

//        NSLog(@"5555555555");

//    });

    

    //3.让代码执行多次

    //第一个参数:要执行的次数

    //第二个参数:在哪个队列中执行

    //第三个参数:

    dispatch_apply(5, queue, ^(size_t a) {

        

        NSLog(@"%zu",a);

        

    });


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值