文档章节

runLoop介绍

AppleDream
 AppleDream
发布于 2016/07/27 11:53
字数 350
阅读 26
收藏 0
点赞 0
评论 0

runLoop

#####1.1.runLoop

  • 每条线程都有唯一的一个与之对应的RunLoop对象
  • 主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
  • RunLoop在第一次获取时创建,在线程结束时销毁
  • runLoop在main函数中调用UIApplicationMain开启

#####1.2.图片

#####2.1.NSTimer与Mode

#pragma  mark - timer
-(void) timer{
    //    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    //NSDefaultRunLoopMode(App的默认Mode,通常主线程是在这个Mode下运行)
    //NSRunLoopCommonModes(App的默认Mode,通常主线程是在这个Mode下运行)
    //UITrackingRunLoopMode(在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用)
    //MODE还有其它的模式,(两种)不用程序员自己设置,上面三种:NSRunLoop每一次只能在一种模式下执行,模式会切换
//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
}

#####3.1.observe

-(void) observe{
    //KVO
    //    [NSRunLoop currentRunLoop] addObserver:<#(nonnull NSObject *)#> forKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>
    //创建observer
    CFRunLoopObserverRef observer=CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        NSLog(@"activity-- %zd",activity);
    });
    //添加观察者:监听RunLoop的状态
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);
    //释放Observer
    CFRelease(observer);

    //CF的内存管理(Core Foundation)
    //1.凡是带有Create、Copy、Retain等字眼的函数,创建出来的对象,都需要在最后做一次release
    // 比如CFRunLoopObserverCreate
    //2.release函数:CFRelease(对象);
}

#####4.github

© 著作权归作者所有

共有 人打赏支持
AppleDream
粉丝 8
博文 89
码字总数 26198
作品 0
昆山
程序员
NSRunloop的解析及autorelease的释放时机

iOS的运行时是由一个一个runloop组成的,每个runloop都会执行下图所示的一些步骤: 每个runloop中都创建一个Autorelease Pool,并在runloop的末尾进行释放, 所以,一般情况下,每个接受aut...

刀客445 ⋅ 2016/05/19 ⋅ 0

iOS 面试全方位剖析 -- RunLoop 篇

程序都是从 main 函数开始启动的,随着 main 函数里执行体结束之后 main 函数也会结束,程序也会退出。但是为什么程序可以保持一个活跃的状态呢? 在 main 函数的 UIApplicationMain 内部会启...

PetitBread ⋅ 06/11 ⋅ 0

iOS运行回路(RunLoop)总结

首先看两个runloop的示例,来源:http://paste.lisp.org/display/86524 第一个: #include static voidperform(void *info _unused){printf("hellon");} static voidtimer(CFRunLoopTimerRe......

长平狐 ⋅ 2012/08/13 ⋅ 0

iOS定时器--NSTimer、CADisplayLink、GCD

前言 在最近的项目开发过程中,遇到了需要运用定时器的需求,在以前的项目中,也没用过定时器。最近做的一个项目很有几个地方用到了定时器,短信验证码倒计时、倒计时取消订单,定时网络请求...

WB_小文 ⋅ 2017/11/20 ⋅ 0

深入理解RunLoop(一)

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释...

泊竹 ⋅ 2015/09/08 ⋅ 0

iOS中设计一个Block代码执行的UIAlertView

Windows下的AlertView(比如java的MessageBox, JS的alert('title'))都是阻塞代码继续执行的,举个例子 iOS原生提供的UIAlertView就不能实现类似的效果,但是依旧可以自己Custom实现,本篇博客...

creeve ⋅ 2015/01/24 ⋅ 0

iOS运行回路(RunLoop)总结

首先看两个runloop的示例,来源:http://paste.lisp.org/display/86524 第一个: #include <CoreFoundation/CoreFoundation.h> static void perform(void *info _unused) { printf("hellon"......

于赟 ⋅ 2012/11/01 ⋅ 0

iOS中RunLoop机制浅探

iOS中RunLoop机制浅探 一、浅识RunLoop RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?首先,我们先来观察一下我...

珲少 ⋅ 2015/08/13 ⋅ 3

RunLoop运行循环 和 RunTime运行时消息机制的介绍和使用

一.Runloop —运行循环 1)用来干嘛的? 是一个死循环,保证程序不退出。程序默认一个线程执行一个任务,执行完任务后该线程就over掉了,但主线程不行,主线程一over掉程序就没有了。主线程没...

如若初见 ⋅ 2016/04/08 ⋅ 0

深入理解RunLoop

今天在整理笔记的时候发现的一篇以前摘下来的博客,目前看到的对RunLoop剖析最棒的一篇. 时间过的比较久,忘了博主和具体的出处了,有知道的请告知一下。 这里排版更清楚噢 RunLoop 的概念 ...

PetitBread ⋅ 2017/06/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部