NSTimer与运行循环

NSTimer准确吗?如果不准确,怎么办?

通常用来有一点时间跨度的周期性事件的处理! CDADisplayLink

 1 //
 2 //  HMViewController.m
 3 //  08-倒计时
 4 //
 5 //  Created by apple on 14-8-18.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8
 9 #import "HMViewController.h"
10
11 @interface HMViewController () <UIAlertViewDelegate>
12
13 @property (weak, nonatomic) IBOutlet UILabel *counterLabel;
14
15 @property (nonatomic, strong) NSTimer *timer;
16 @end
17
18 @implementation HMViewController
19
20 /** 开始 */
21 - (IBAction)start
22 {
23     // 倒计时10秒,每秒更新一下Label的显示
24     // 计时器
25     /**
26      参数说明
27      1. 时间间隔,double
28      2. 监听时钟触发的对象
29      3. 调用方法
30      4. userInfo,可以是任意对象,通常传递nil
31      5. repeats:是否重复
32      */
33     self.counterLabel.text = @"10";
34
35     // scheduledTimerWithTimeInterval 方法本质上就是创建一个时钟,
36     // 添加到运行循环的模式是DefaultRunLoopMode
37     // ----------------------------------------------
38     // 1>
39 //    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:@"hello timer" repeats:YES];
40
41     // ----------------------------------------------
42     // 2> 与1等价
43 //    self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
44 //    // 将timer添加到运行循环
45 //    // 模式:默认的运行循环模式
46 //    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
47
48     // ----------------------------------------------
49     // 3>
50     self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
51     // 将timer添加到运行循环
52     // 模式:NSRunLoopCommonModes的运行循环模式(监听滚动模式)
53     [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
54     //[self updateTimer:self.timer];
55 }
56
57 /** 时钟更新方法 */
58 - (void)updateTimer:(NSTimer *)timer
59 {
60    // NSLog(@"%s", __func__);
61     // 1. 取出标签中的数字
62     int counter = self.counterLabel.text.intValue;
63
64     // 2. 判断是否为零,如果为0,停止时钟
65     if (--counter < 0) {
66         // 停止时钟
67         [self pause];
68
69         // 提示用户,提示框
70 //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"开始" message:@"开始啦......" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", @"哈哈", nil];
71 //
72 //        [alert show];
73         [[[UIAlertView alloc] initWithTitle:@"开始" message:@"开始啦......" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", @"哈哈", nil] show];
74     } else {
75         // CTRL + I
76         // 3. 修改数字并更新UI
77         self.counterLabel.text = [NSString stringWithFormat:@"%d", counter];
78     }
79 }
80
81 /** 暂停 */
82 - (IBAction)pause
83 {
84     // 停止时钟,invalidate是唯一停止时钟的方法
85     // 一旦调用了invalidate方法,timer就无效了,如果再次启动时钟,需要重新实例化
86     [self.timer invalidate];
87 }
88
89 #pragma mark - alertView代理方法
90 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
91 {
92     NSLog(@"%ldaaa-------", (long)buttonIndex);
93 }
94
95 @end
时间: 2024-10-20 07:03:27

NSTimer与运行循环的相关文章

Runloop(运行循环)是什么?

运行循环是什么?从介绍到演示 今天整理一下运行循环来帮朋友们了解一下什么是运行循环,也叫消息循环,建议大家称之为运行循环(Runloop). 关于多线程的运行循环(消息循环) 1. 什么是运行循环 (1)Runloop就是运行循环,每个线程内部都有一个运行循环. (2)只有主线程的运行循环默认是开启的,子线程的运行循环. 2. 运行循环的作用 (1)保证程序不退出,iOS的应用程序启动之后,之所以不会退出,就是因为有Runloop(运行循环).运行循环是一个死循环,只有满足一定条件才会结束循环.

Runloop 运行循环

什么是RunLoop 运行循环 一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(懒加载, 调用currentRunLoop方法) RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source(Sources0.Sources1).Timer,那么就直接退出RunLoop RunLoop作用 保持程序的持续运行 处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事

iOS开发 底层抛析运行循环—— RunLoop

http://blog.csdn.net/zc639143029/article/details/50012527 一.RunLoop基本概念 概念:程序的运行循环,通俗的来说就是跑圈. 1. 基本作用(作用重大) (1) 保持程序的持续运行(ios程序为什么能一直活着不会死) (2) 处理app中的各种事件(比如触摸事件.定时器事件[NSTimer].selector事件[选择器·performSelector···]) (3)节省CPU资源,提高程序性能,有事情就做事情,没事情就休息 2.

RunLoop运行循环机制

http://www.jianshu.com/p/0be6be50e461 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存空间内,比如同时打开迅雷.Xcode,系统就会分别启动两个进程. 线程 一个人进程如果想要执行任务,必须得有至少一条线程,进程的所有任务都会在线程中执行,比如使用网易云音乐播放音乐,使用迅雷下载电影,都需要在线程中执行. 主线程 iOS 程序运行后,系统会默认开启一条线程,称为“主线程”或者“UI 线程”,主

运行循环(Run Loops)

运行循环是与线程相关的基础工具的一部分.运行循环是一个用来安排工作并协调传入事件接收的一个事件处理循环.运行循环的目的是当需要工作的时候,让你的线程处于忙碌状态:当没有工作时,让你的线程处于睡眠状态. 运行循环管理并不是完全自动运行,你必须设计线程代码在适当的时间启动运行循环并响应传入的事件.Cocoa和核心基础提供运行循环对象来帮助你配置和管理你的线程运行循环.你的引用不需要显式的创建这些对象,每个线程,包括应用的主线程都有一个关联的运行循环对象.然而,只有次要线程需要显式的运行他们的运行循环

运行循环

程序启动就是有一个运行循环,监听系统中的所有事件 运行有两种模式(从代码来看) NSDefaultRunLoopMode(默认,用户普通点击) NSRunLoopCommonModes(滚动) 一旦发现有滚动事件,默认模式暂时不监听 Timer,(是一个没地位的,) 如果cpu在做大规模运算,cup没时间打理Timer,Timer就闲下来不执行,和下一次一起执行,任务的叠加 Timer,通常用来有一定时间跨度的处理周期性事件,所以不是准确,可以用多线程处理 CADdisplaylink

IOS 开发笔记-基础 UI(9)运行循环的概念

运行循环 int i = 0; // 死循环 while (YES) { printf("请输入一个整数,0表示退出:"); scanf("%d", &i); NSLog(@"%d", i); if (i == 0) { break; } } 以上程序,会不停的循环运行,但是,会在输入的时候中断,等待,有了输入之后,再继续循环运行,且一旦输入了复合条件的值,那么通过 if 判断,break退出循环体. 这就是简单的 runloop 模型.

UI基础--使用UIScrollView、UIPageControl、NSTimer实现图片循环播放

实现思路: 1.创建一个UIScrollView,这里设置为宽度300,高度130,通过storyboard创建: 2.使用代码在UIScrollView中添加ImageView,横向放入多张ImageView: 3.设置UIScrollView的contentSize为所有图片的宽度总和: 4.要保证UIScrollView的宽度等于一张ImageView的宽度,才能正确分页: 5.添加UIPageControl控件,设置当前页数和总页数: 6.添加NSTimer实现自动循环: UIPageC

主运行循环

主运行循环负责处理所有跟用户操作相关的事件,主运行循环在程序启动时被 UIApplication 对象创建,运行在主线程上,用来处理事件和更新基于View的UI. 当用户与设备交互时,操作系统生成相关的事件,然后通过一个由 UIKit 创建的端口,交给App.事件先加入事件队列,然后一个一个的交给主运行循环去处理.UIApplication 对象是第一个接收到事件的对象. 大部分类型的事件会交给App.但是有些事件不会,比如加速度计事件会直接交给定义的加速度代理对象去处理. 主运行循环