ios多线程

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">ios多线程</span>

什么是线程?

很多人会把线程和进程弄混淆, 进程是每个正在运行的程序, 它们都可以看成一个进程, 而线程是是程序中独立运行的代码段, 例如微信的发送消息和接收消息, 它们就是独立运行的代码段.

一个进程中可以包含很多个线程, 最少为一个,建议最大不要超过10个,它们是包含与被包含的关系

那么为什么会有多线程呢?

我是这么理解的,如果把一个进程当做一条公路, 线程就好比是公路上的车道,而我程序执行的代码就是汽车, 如果我们不给它任何的改变,那么它就只有一条车道(我们称之为单线程), 当汽车在车道上行驶时, 只能一辆一辆的通过, 会很影响后面的车辆, 影响整条公路的运行, 而这时我们就需要把公路划分车道, 三车道, 四车道,甚至更多, 这样就能在不影响整条公路的情况下, 提高运行效率

创建线程的几种方式

1.NSThread

    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(calculator) object:nil];
    [thread start];
    [thread release];
    
    [NSThread detachNewThreadSelector:@selector(calculator) toTarget:self withObject:nil];
2.NSObject

<span style="font-size:18px;">    [self performSelectorInBackground:@selector(calculator) withObject:nil];</span>

3. NSOperation NSOperationQueue

    MyOperation *operation = [[MyOperation alloc] init];
    [operation start];
    MyOperation *operation1 = [[MyOperation alloc] init];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    // 线程并发, 互不干扰同时进行
    // 最大并发数为1时, 线程和线程之间是同步的
   // 并发 concurrent 同步 serial
    queue.maxConcurrentOperationCount = 1;
    [queue addOperation:operation];
    [queue addOperation:operation1];
    [operation release];
    [operation1 release];
 NSBlockOperation
    // block里面的内容就是多线程所要执行的代码
    NSBlockOperation *blokOper = [NSBlockOperation blockOperationWithBlock:^{
    @autoreleasepool {
        for (int i = 0; i < 1000; i++) {
            NSLog(@"i = %d", i);
        }
    }
    }];
    NSOperationQueue *quene = [[NSOperationQueue alloc] init];
    [quene addOperation:blokOper];
    [quene release];


4.GCD(现在的创建线程的主要方式, 用起来更简单,更灵活,)

     //第一步 创建一个同步线程队列    
dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);
    // 第二步: 异步执行同步线程队列
    dispatch_async(queue, ^{
        // 多线程的代码
        // 在GCD中没有自动释放池 C语言写的
        // 显示到界面上,所有跟UI相关的内容全部都要在主线程运行
        // 返回主线程
        dispatch_async(dispatch_get_main_queue(), ^{
          
        });
    });



//创建一个并行队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
        });
    });

注意: GCD是ios4.0以后出现的,  并且在所有的进程中都不能修改页面, 必须要返回到主线程才可以, block中为需要实现的功能






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值