• ios学习记录 day41 UI17 多线程


    CPU(工厂) 进程(车间) 线程(工人)

    一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域.

    打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压.

    什么时候用多线程

    1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库select

    ios中多线程编程

    在多线程的方法需要添加自动释放池!!!  在应用程序打开的时候系统自动为主线程创建一个自动释放池,自己创建的子线程需要自己手动添加

    NSThread;NSOperationQueue;NSOperation;NSObject;
    GCD;(常用)

    1.

    NSThread轻量级 俩个方法- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument   (需要手动开始 用start)

                              + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument    (自动开始)

                              start(开始) cancel(结束)

    2.

    NSOperation(网络异步请求 用的最多 ios一般开10条线程)  是基类,在主线程中

    NSOperationQueue(线程队列 一般同时请求超过10条 所以用队列)  init在主线程中main在子线程中

    线程队列一般配合单例使用

    3.

    NSObject 异步后台执行

    [self performSelectorInBackground:@selector(aButtonAction) withObject:nil];

    4.

    GCD(Grand Central Dispatch) 苹果开发的技术,以优化应用程序支持多核心处理器和其他的对称多处理系统的系统,是建立在任务并行执行的线程池模式的基础上的,不用autorelease   是IOS4.0之后可用

    GCD让程序平行排队执行任务  一个任务可以是一个函数或者是一个block,GCD的底层依然是用线程实现   GCD中得FIFO队列dispatch queue 保证先进先出

    dispatch queue分为以下三种:

    serial(同步执行):private dispatch queue最多同时运行1个子线程            每个队列中是同步执行的  同步队列与同步队列之间是并发的

    concurrent(并发):global dispatch queue最多同时运行count个子线程      可以并发的执行多个任务,但是执行完成的顺序是随机的

    main dispatch queue():在主线程上执行任务

    如何返回主线程

    方法只有两个:

    1.GCD  dispatch_get_main_queue()

    2.NSObject   - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;//除了GCD都用这个

    线程互斥

    两个人同时访问一个资源 (尽量不要在方法中对成员变量和属性操作)解决办法 加锁解锁 递归和循环容易造成死锁

  • 相关阅读:
    [erlang 002]gen_server中何时会跑到terminate函数
    设计模式:桥接模式
    设计模式:组合模式
    Harbor:镜像上传和下载
    Harbor:简介和安装
    Docker:compose
    ThinkPHP的静态化页面方法
    php使用memcached详解
    大话PHP设计模式
    PHP魔术方法使用
  • 原文地址:https://www.cnblogs.com/lxllanou/p/3697164.html
Copyright © 2020-2023  润新知