iOS中的多线程及GCD

多线程中的一些概念

//任务:代码段  方法  线程就是执行这些任务

//NSThread类 创建线程 执行线程

[NSThread isMainThread]//判断是否是主线程

#import "AppDelegate.h"

@implementation AppDelegate
-(void)dealloc
{
    [_window release];
    [super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    //实现多线程
    //任务:代码段  方法  线程就是执行这些任务
    //NSThread类 创建线程 执行线程
    NSLog(@"-------------%d",[NSThread isMainThread]);//判断是否是主线程

    //实现多线程的方式一
    //使用 根类 NSObject 中的 performSelectorxxx方法
    //UI的刷新一定要在主线程里进行  子线程刷新UI会异常  刷新不了   或者延迟刷新.
//    [self performSelectorInBackground:@selector(aa) withObject:nil];

    //实现多线程的方式二
    //使用 NSThread 类(多线程类)
    //创建一个线程 ,并让线程执行 self 的aa方法

    //线程分两种  脱离线程 和 非脱离线程
    //脱离线程;执行玩任务之后,自动销毁的线程
    //非脱离线程 : 执行完任务之后 ,不会被销毁的线程,可以后续执行别的任务
    //每一个线程都自带一个NSRunLoop对象,runloop默认是关闭的.一旦runloop开启,你的线程就会成为非脱离线程.runloop帮你轮询有没有新的任务分配到了这个线程里面

    //[NSThread detachNewThreadSelector:@selector(aa) toTarget:self withObject:nil];

    //创建一个线程,线程需要执行的任务是self 的aa 方法
//    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(aa) object:nil];
//    [thread start];//开始执行线程   解决了延迟执行的问题  在想执行的时候执行

    //第三种实现多线程的方式NSOperationQueue
    NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(aa) object:nil];
//    [op1 start];

    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"这是一个block operation");
    }];
    //线程同步就是串行  线程之间有依赖关系的时候使用同步 实现同步就把NSOperationQueue的MaxConcurrentOperationCount最大并发数为1
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//    NSLog(@"~~~~~~~~~~~~~~~~~~~~~~~~%d",queue.maxConcurrentOperationCount);
    [queue setMaxConcurrentOperationCount:1];//设置最大并发数为1
    [queue addOperation:op1];//只需要把操作放到队列里即可,不需要人为调用start,queue会根据op的排队情况,帮你调用start .会智能帮为op安排线程
    [queue addOperation:op2];

    [self.window makeKeyAndVisible];
    return YES;
}

- (void)aa
{
    //如果在子线程中执行任务 我们需要在任务里面加一个自动释放池
    //因为.线程与线程之间是相互独立的,但是资源是共享的,共享堆 空间 ,如果一个线程开辟了空间  没有释放  其他线程也无法 使用这块已经开辟的空间
    //尤其是当子线程里  大量使用便利构造器的时候 会导致很多堆空间无法回收内存
    //线程共享堆  ,栈不共享  每个子线程默认以栈的大小是512k  主线程栈大小事1M 栈主要是放 局部变量的,局部变量出了方法就会被销毁,因此,尽管只有512k或着1M但是已经够用的了 ,,栈空间的大小必须是4k的整数倍
    //
    @autoreleasepool {
        for (int i = 0; i<10; i++) {
            NSLog(@"%d",i);
        }
        NSLog(@"#################%d",[NSThread isMainThread]);

        [self performSelectorOnMainThread:@selector(bb) withObject:nil waitUntilDone:YES];
        NSLog(@"子线程结束了");
    }

}
- (void)bb
{
    @autoreleasepool {
        NSLog(@"??????????????????????%d",[NSThread isMainThread]);
        for (int i = 0; i<20; i++) {
            NSLog(@"-%d",i);
        }
        NSLog(@"刷新你的UI");
    }

}

iOS中的多线程及GCD,布布扣,bubuko.com

时间: 2024-10-04 16:57:33

iOS中的多线程及GCD的相关文章

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio

OS X 和iOS 中的多线程技术(上)

OS X 和iOS 中的多线程技术(上) 本文梳理了OS X 和iOS 系统中提供的多线程技术.并且对这些技术的使用给出了一些实用的建议. 多线程的目的:通过并发执行提高 CPU 的使用效率,进而提供程序运行效率. 1.线程和进程 进程 什么是进程 进程是指在计算机系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行中其专用且受保护的内存空间内 比如同时打开 Xcode .Safari ,系统就会分别启动两个进程 通过活动监视器可以查看Mac系统中所开启的进程 线程 什么是线程 一

iOS开发笔记--iOS中的多线程

摘要 本文主要介绍iOS开发中的三种多线程技术:NSThread, NSOperation/NSOperationQueue, GCD.以及在多线程编程中的注意点和小技巧. 多线程 NSThread NSOperation/NSOperationQueue GCD 目录[-] iOS中的多线程 iOS的三种多线程技术特点: GCD基本思想 队列: 操作: 不同队列中嵌套同步操作dispatch_sync的结果: 同步操作dispatch_sync的应用场景: GCD优点: GCD队列: NSOp

OS X 和iOS 中的多线程技术(下)

OS X 和iOS 中的多线程技术(下) 上篇文章中介绍了 pthread 和 NSThread 两种多线程的方式,本文将继续介绍 GCD 和 NSOperation 这两种方式.. 1.GCD 1.1 什么是GCD GCD 全称 Grand Central Dispatch,可译为"牛逼的中枢调度器" GCD 基于纯 C 语言,内部封装了强大的函数库 1.2 使用 GCD 有什么优势 GCD 是苹果公司为多核的并行运算提出的解决方案 GCD 会自动利用更多的CPU内核 (如 二核 ,

ios中的多线程的用法总结

ios中的多线程的用法总结 1.进程的基本概念 (1)每一个进程都是一个应用程序,都有独立的内存空间,一般来说一个应用程序存在一个进程,但也有多个进程的情况 (2)同一个进程的线程共享内存中的内存和资源 2.多线程的基本概念 (1)每一个程序都有一个主线程,程序启动时创建(调用main来启动). (2)多线程技术表示,一个应用程序有多个线程,使用多线程能提供CPU的利用率,防止主线程被堵塞. (3)任何有可能堵塞主线程的任务不要在主线程执行(如:访问网络). (4)主线程的生命周期和应用程序绑定

iOS中的多线程

iOS中的多线程 首先来了解什么是多线程,进程和线程的区别. 进程: 正在进行中的程序被称为进程,负责程序运行的内存分配; 每一个进程都有自己独立的虚拟内存空间. 线程:(主线程最大占1M的栈区空间,每条子线程最大占512K的栈区空间) 线程是进程中一个独立的执行路径(控制单元); 一个进程中至少包含一条线程,即主线程; 可以将耗时的执行路径(如网络请求)放在其他线程中执行; 线程不能被杀掉,但是可以暂停/休眠一条线程. 创建线程的目的: 开启一条新的执行路径,运行指定的代码,与主线程中的代码实

iOS中的多线程 NSOperation

在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation和NSOperationQueue这种方式实际上是将NSOperation的对象放到一个NSOperationQueue队列中,然后依次启动操作,类似于线程池的使用. 在使用的过程中,NSOperation的操作使用的是它的子类,分别是NSInvocationOperation和NSBlockOpe

iOS中关于多线程的实现方案的介绍(一)

什么是进程 >  进程是指在系统中正在运行的一个应用程序 >  每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 什么是线程 >  1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) >  线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 什么是多线程 >  1个进程中可以开启多条线程,每条线程可以并发(同时)执行不同的任务 >  进程 à 车间,线程 à 车间工人 >  多线程技术可以提高程序的执行效率 多线程的原

iOS中处理多线程的方式.

NSObject提供的处理多线程的方法. NSThread: 创建一个NSThread对象就是创建了一个线程 缺点: 需要手动管理线程的基本信息, 比如线程的开启, 线程的安全等. 优点: 可以快速创建一个线程并且对线程有控制权, 很轻量级. 3. NSOpeationQueue: 创建一个队列, 把线程加入到队列中, 在main方法中实现功能. 4. GCD(Grand Central Dispatch 大调度中心): 获得一个队列, 把任务添加到队列中, 让队列管理执行的任务. 特点: 效率