zoukankan      html  css  js  c++  java
  • 自动释放池 消息循环

    运行循环(RunLoop):
    保证程序不退出 (死循环)
    监听所有的事件 点击,触摸等 网络数据加载完成
    特性:没有事件的时候 会进行休眠  一旦监听到事件  会立即响应
     每一个线程都会有一个runLoop 默认是关闭的,只有主线程的runloop 会启动
    
    当一个程序运行起来的时候,只有主线程的消息循环是默认开启的,子线程的消息循环默认是关闭的若想要去让子线程需要实现下面这个方法

      NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo) object:nil];

      [thread start];

      // 输入源事件

      [self performSelector:@selector(demo2) onThread:thread withObject:nil waitUntilDone:NO];

    - (void)demo{

       // 若是把这个循环添加在这,那么下面那句永远不会执行,因为运行循环就是一个死循环..程序也不死

    1.    //1. [[NSRunLoop currentRunLoop]run];

        [[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];

        NSLog(@"haha");

    }}

    - (void)demo2{

        

        NSLog(@"%@",[NSThread currentThread]);

        NSLog(@"demo2");

    }}

    /输入事件:

    11.输入源事件

        鼠标事件

        键盘事件

        [self performSelector:@selector(demo2) onThread:thread withObject:nil waitUntilDone:NO];

    2.定时器事件

    
    
    


    自动释放池作用: 延迟释放 : 所有用类方法实例出来的对象 都是延迟释放的 所有延迟释放的对象 在出了作用域之后 会被自动添加到最新的自动释放池中 不会立即释放 自动释放池释放后会向池子里的所有对象发送release消息 关系
    1.开始 运行状态处于休眠状态 2.事件触发,运行循环开始工作 3.创建自动释放池 4,所有事件创建的对象都放在的自动释放池中 5.(事件完成)自动释放池结束 向对象发送一次release消息 6运行循环又进入到休眠状态 当事件启动 是RunLoop创建的自动释放池 ARC 中 自动释放池也是工作的

  • 相关阅读:
    bash的for循环从命令读取值
    BFS-hdu-1226-超级密码
    计算机改名导致数据库链接的诡异问题
    There is insufficient system memory to run this query 错误
    SQL Server 2008 R2的发布订阅配置实践
    MS SQL 日常维护管理常用脚本(二)
    TreeSize工具介绍
    迁移Reporting Services的方法与WMI错误
    spring-session-data-redis解决session共享的问题
    elasticSearch6源码分析(12)DiscoveryModule
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5239710.html
Copyright © 2011-2022 走看看