您的位置:首页 > 移动开发 > IOS开发

iOS 开发笔记(线程)

2014-04-01 21:28 281 查看
 //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);

        

    });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: