Cocoa Touch(五):App运行机制 NSRunLoop, KVC, KVO, Notification

runloop相关基础类定义

1、日期对象 NSDate, NSDateFormatter

NSDate的实例表示一个日期,线程可以借助于NSDateFormatter的实例实现NSDate对象和NSString对象的相互转换。

// date方法返回的就是当前时间(now)
 NSDate *date = [NSDate date];
// now:  11:12:40
// date: 11:12:50
 date = [NSDate dateWithTimeIntervalSinceNow:10];//返回当前时间10秒后的时间
 // 从1970-1-1 00:00:00开始
 date = [NSDate dateWithTimeIntervalSince1970:10];//返回1970-1-1 00:00:00时间10秒后的时间
 // 随机返回一个比较遥远的未来时间
 date = [NSDate distantFuture];
 // 随机返回一个比较遥远的过去时间
 date = [NSDate distantPast];
// 返回1970-1-1开始走过的毫秒数
 NSTimeInterval interval = [date timeIntervalSince1970];
 // 跟其他时间进行对比
 NSDate *date2 = [NSDate date];
 // 返回比较早的那个时间
 [date earlierDate:date2];
 // 返回比较晚的那个时间
 [date laterDate:date2];  

//获取两个时间的时间差
[date1 timeIntervalSinceDate date2]; 

NSDate *date = [NSDate date];
 // 2013-04-07 11:14:45
 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 // HH是24进制,hh是12进制
 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
 // formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] autorelease];
 NSString *string = [formatter stringFromDate:date];
 NSLog(@"%@", string);
 // 返回的格林治时间
 NSDate *date2 = [formatter dateFromString:@"2010-09-09 13:14:56"];  

2、定时器 NSTimer

可以使用NSTimer的实例在一个NSRunLoop实例中注册一个定时事件源,并且把这个timer实例注册为这个事件的观察者。也就是说一个定时器和定时事件是绑定的,我们将在下文中结合runloop讲解。

事件循环对象NSRunLoop

1、run loop概念

NSRunLoop类封装了线程进入事件循环的过程,一个runloop实例就表示了一个线程的事件循环。

处于事件循环的线程接收的事件源有两种:input source 和 timer source。线程调用便利函数 [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:] 在创建一个NSTimer实例的同时,以默认模式Default mode在当前线程的run loop中注册了一个timer source,并且把新创建的timer添加到run loop中,作为事件的观察者。

不过每个线程在创建定时器的时候不立刻把它添加到run loop中,只需要调用 [NSTimer timerWithTimeInterval: target: selector: userInfo: repeats:],然后再使用[NSRunloop currentRunLoop]获取对应的事件循环对象,再调用 [runloop addTimer] 方法,那么就会注册一个定时事件,在这个定时器失效之前,当前线程就不会直接终止。或者可以调用 [[NSTimer alloc]  initWithFireDate:interval:target:selector:userInfo:repeats: ]指定一个定时器的开始时间。

2、定时器生命周期控制

使用定时器中的fire方法和invalidate方法来控制一个timer的声明周期,对于不断重复的timer来说,就需要这么做。

3、run loop mode类型

KV监听机制

Cocoa开发框架内置通知机制,可以实现数据改变后对每个观察者的通知。

KVC 键值编码

KVO 键值监听

在什么场景下需要KVC?最简单的一种应用场景,如果一个控件的属性被声明为@property(nonatomic,readonly)只读,那么就只能通过KVC去修改这个属性,比如当我们需要用自定义tabBar替换UITabBarController中的原始tabBar的时候。

时间: 2024-11-06 06:48:34

Cocoa Touch(五):App运行机制 NSRunLoop, KVC, KVO, Notification的相关文章

Cocoa Touch(六):App运行机制 NSRunLoop, KVC, KVO, Notification, ARC

事件循环NSRunLoop 1.run loop概念 NSRunLoop类封装了线程进入事件循环的过程,一个runloop实例就表示了一个线程的事件循环. 处于事件循环的线程接收的事件源有两种:input source 和 timer source.线程调用便利函数 [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:] 在创建一个NSTimer实例的同时,以默认模式Default mode在当

五:Mapreduce运行机制

mapreduce运行机制 mapreduce作业执行涉及4个独立的实体: 1. 客户端(client):编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作: 2. JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行: 3. TaskTracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的   不同有个很重要的方面,就是在执行任务时候TaskTra

Cocoa Touch的3种类的交流方式delegate/target/notification

1. Delegate 在Cocoa Touch类对象运行的周期中,某一个时间点它会去调用一些指定类的指定函数来完成他自身所要完成的功能.这个”指定的类”,就称为这个类的委托类.”指定函数”则是一些在协议(protocal)中完定义的方法. 比如UITableView,在它的运行周期中,它会调用委托类的一系列函数来完成对自身的初始化工作.我们需要做的,只是指定好它的委托类,并且在委托类中实现UITableView将要调用的委托方法.那我怎么知道UITableView要调用哪些方法呢?其实很简单,

[IOS/翻译]Cocoa Touch Layer

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的CSDN的博客 http://blog.csdn.net/Zheng_Paul,感谢! 翻译于2015年10月6日 Cocoa Touch Layer Cocoa Touch层包含了关键的库来构建IOS应用.这些库定义了应用的表现.他们提供应用的基本空间和提供关键技术,如多任务,以接触为基础的输入,消息推送,和许多高级的系统服务.当你设计你的应用时候,你需要优先研究他们. 高级别的特性 接下来的章节描述一些关键技术 App Exte

使用Xcode 5创建Cocoa Touch Static Library(静态库)

转自:http://blog.csdn.net/jymn_chen/article/details/21036035 首先科普一下静态库的相关知识: 程序编译一般需经预处理.编译.汇编和链接几个步骤.对于我们项目中的一些公共代码,如果想要对其进行复用,可以把这些代码编译成一个静态库文件.在链接步骤中,链接器会从库文件中取得对应的代码并生成可执行文件.静态库的执行文件中包含了库中的完整代码,但是多次使用会产生多份冗余拷贝. 静态库和动态库的区别在于静态库在链接阶段被复制,与程序的运行阶段无关:动态

Swift—Cocoa Touch设计模式-备

目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制.   问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击按钮的时候,标签文本会从初始的Label替换为HelloWorld. ButtonLabelSample案例首先要解决的问题是:按钮点击事件后有谁负责响应事件?谁进行事件处理?要答这个问题,可以打开ButtonLabelSample案例故事板文件Main.storyboard,如图所示,OK按钮是在

SSL/TLS协议运行机制的概述

转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获知通信内容. (2) 篡改风险(tampering):第三方可以

【Spark Core】任务运行机制和Task源代码浅析1

引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向executorActor发送任务消息. 我们要了解Executor的运行机制首先要了解Executor在Driver側的注冊过程.这篇文章先了解一下Application和Executor的注冊过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor运行的Task分为ShuffleMa

JavaWeb三大组件——过滤器的运行机制理解

过滤器Filter 文章前言:本文侧重实用和理解. 一.过滤器的概念. lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 二.过滤器的运行机制. 没有加Filter的web项目运行机制如下: 加上Filter的web运行机制: 由