zoukankan      html  css  js  c++  java
  • RunLoop

    1,Core Foundation框架中。基本作用:保持程序的持续运行,处理app的各种事件,节省cpu资源,提高程序性能
    2.RunLoop:每个线程都会有一个唯一的RunLoop对象,主线程的系统自动创建(当访问其他线程的RunLoop,就会自动创建mainRunLoop),子线程的需要手动创建,[NSrunLoop currentRunLoop]; 要启动的话要调用run。。在run之前,RunLoop中的mode必须有port Source,timer,observer其中一个,要不然刚启动就会死(若mode为空, ,再退出)
    2.1加入timer时,使用[NStimer scheduledTimer...]它时,默认就会将timer加入RunLoop,[NStimer timerWithTime…]则需手动加入,俩个都一样,需要手动启动RunLoop
    3.每次RunLoop启动时,只能指定其中一个mode这个mode被称为CurrentMode,如果需要切换Mode只能退出loop,再重新指定一个mode 进入
    4.添加观察者 CFRunLoopAddObserver 
    5.CF的内存管理 
      1)凡是带有Create,copy,Retain等字眼的函数,创建出来的对象,都需要在最后做一次release
     比如CFRunLoopObserverCreate
      2,)release函数:CFRelease(对象)
    6.线程在完成它的任务后,,就会进入销毁状态:这时可以搞个常驻线程(在线程要执行任务内容中加入,启动一个RunLoop)
    7.将RunLoop放入自动释放池, 可以让RunLoop睡眠之前释放
     
    什么是RunLoop?
    从字面意思看,运行循环,跑圈
    其实它内部就是do-while循环,在这个循环内部不断的处理各种任务(比如source,timer,observer)
    一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)
    RunLoop只能选择启动一个Mode启动,如果当前Mode中没有任何source,timer,observer,那么就直接退出RunLoop
     
    在应用开发中如何使用RunLoop,什么应用场景?
    1),开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程来发消息,处理其它事件)
    再子线程开启一个定时器
    在子线程中进行一些长期监控
     
    2)可以使用控制定时器在特定模式下执行
    可以让某些事件(行为,任务)在特定模式下执行
    3)可以添加Observer监听RunLoop的状态,比如监听事件的处理(在所有点击事件之前做一些事情)
  • 相关阅读:
    ETF上线技术要素
    oracle修改用户的schema
    list
    交易系统分类OMS/EMS
    类的大小2
    webpack5教程
    vue配置stylelint教程
    提高国内访问 GitHub 的速度的 9 种方案
    git常见的操作
    img 图像底部留白的原因以及解决方法
  • 原文地址:https://www.cnblogs.com/ouyangxiaoyao/p/5289721.html
Copyright © 2011-2022 走看看