ios nstimer实现延时_iOS中延迟执行和取消的几种方式
公用延迟执行的方法:- (void)delayMethod {NSLog(@"delayMethodEnd");}方法一、performSelector 方法1、延迟执行/***延迟执行**@param aSelector方法名称*@param anArgument要传递的参数,如果无参数,就设为nil*@param delay延迟的时间*/- (void)perfor...
公用延迟执行的方法:
- (void)delayMethod {
NSLog(@"delayMethodEnd");
}
方法一、performSelector 方法
1、延迟执行
/**
* 延迟执行
*
* @param aSelector 方法名称
* @param anArgument 要传递的参数,如果无参数,就设为nil
* @param delay 延迟的时间
*/
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
2、取消延迟执行
下面两个方法都是类方法,不能用实例对象去调用,只能用 NSObject。
/**
* 取消延迟执行的某一方法
*
* @param aTarget 一般填self
* @param aSelector 延迟执行的方法
* @param anArgument 设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
*/
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
/**
* 取消延迟执行的所有方法
*
* @param aTarget 一般填self
*/
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
3、使用如下:
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:2.0];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethod) object:nil];
[NSObject cancelPreviousPerformRequestsWithTarget:self];
方法二、NSTimer 定时器
1、延迟执行
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
2、取消延迟执行
- (void)invalidate;
3、使用如下:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
[timer invalidate];
方法三、NSThread线程的sleep
1、延迟执行
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
注:此方法是一种阻塞执行方式,建议放在子线程中执行,否则会卡住界面。但有时还是需要阻塞执行,如进入欢迎界面需要沉睡3秒才进入主界面时。
2、取消延迟执行
sleep放入子线程,可以通过处理取消。
3、使用如下:
[NSThread sleepForTimeInterval:2.0];
[self delayMethod];
方法四、GCD
1、延迟执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
2、取消延迟执行
// to do
3、使用如下:
int64_t delayInSeconds = 10.0; // 延迟的时间
/*
* delta:
*
* @parameter 1.时间参照,从此刻开始计时
* @parameter 2.延时多久,此处为秒级,还有纳秒等: 10ull * NSEC_PER_MSEC
*/
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf delayMethod];
});
最后
完整代码:
- (void)allMethod {
// 1.
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:2.0];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethod) object:nil];
[NSObject cancelPreviousPerformRequestsWithTarget:self];
// 2.
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
[timer invalidate];
// 3.
[NSThread sleepForTimeInterval:2.0];
[self delayMethod];
// 4.
int64_t delayInSeconds = 10.0; // 延迟的时间
/*
* delta:
*
* @parameter 1.时间参照,从此刻开始计时
* @parameter 2.延时多久,此处为秒级,还有纳秒等: 10ull * NSEC_PER_MSEC
*/
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf delayMethod];
});
}
- (void)delayMethod {
NSLog(@"delayMethodEnd");
}
iOS 设置 延迟执行 与 取消延迟执行 方法 以及对 run loop 初步认识
之前开发过程中经常会有需求会使用 NSObject中的"performSelector:withObject:afterDelay:"做方法延迟执行的处理, 但是 还没有什么地方需 ...
IOS中延迟执行的几种方法
前几天去国美在线面试,就遇到了上面的问题,当时是笔试,只写出来了第一种方法,现在整理了一下. //1.performSelector方法:在当前线程中执行的方法,使用默认模式,并延迟执行@select ...
iOS中UIWebView执行JS代码(UIWebView)
iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...
C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
聊聊业务系统中投递消息到mq的几种方式
背景 电商中有这样的一个场景: 下单成功之后送积分的操作,我们使用mq来实现 下单成功之后,投递一条消息到mq,积分系统消费消息,给用户增加积分 我们主要讨论一下,下单及投递消息到mq的操作,如何实现 ...
Mybatis中使用association进行关联的几种方式
这里以一对一单向关联为例.对使用或不使用association的配置进行举例. 实体类: @Data @ToString @NoArgsConstructor public class IdCard ...
【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
Action中取得request,session的四种方式
Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...
Dojo初探之2:设置dojoConfig详解,dojoConfig参数详解+Dojo中预置自定义AMD模块的四种方式(基于dojo1.11.2)
Dojo中想要加载自定义的AMD模块,需要先设置好这个模块对应的路径,模块的路径就是这个模块的唯一标识符. 一.dojoConfig参数设置详解 var dojoConfig = { baseUrl: ...
随机推荐
php的面向对象
今天PO一段php的面向对象相关知识吧.面向对象的相关概念和理论知识是很抽象的,要结合现实中的事物来理解,这样有助于类比记忆.还有就是要多接触吧,量变引质变这个应该还是一个硬道理吧,有时候量够了的话, ...
关于NOIP2016与NOI2018
NOIP2016惨淡收场了,距离省一还有相当一大段距离,省队更是差了十条街去了,不过没关系. 既然已经对信息学产生了兴趣,竞赛无疑是最好的锻炼场所. 路是自己选择的,伤痕累累也要走下去. 还有一年,事 ...
R语言简单聚类分析
#以R基础包自带的鸢尾花(Iris)数据进行聚类分析iris data
PHP获取APP客户端的IP地址的方法
分析php获取客户端ip 用php能获取客户端ip,这个大家都知道,代码如下: /** * 获取客户端ip * @param number $type * @return string */ func ...
ARP攻击之Kali Linux局域网断网攻击
特别声明: 我们学习研究网络安全技术的目的应是为了维护网络世界的安全,保护自己和他人的私有信息不被非法窃取和传播.请您遵守您所在地的法律,请勿利用本文所介绍的相关技术做背离道德或者违反法律的事情. S ...
堆应用---构造Huffman树(C++实现)
堆: 堆是STL中priority_queue的最高效的实现方式(关于priority_queue的用法:http://www.cnblogs.com/flyoung2008/articles/213 ...
【Common】NO.81.Note.1.Common.1.002-【文章摘要】
1.0.0 Summary Tittle:[Common]NO.81.Note.1.Common.1.002-[文章摘要] Style:Common Series:Common Since:2018- ...
linux下直接复制文件内容到剪切板
title: linux下直接复制文件内容到剪切板 date: 2017-11-23 17:00:06 tags: categories: Linux 首先安装xsel. xsel --input - ...
Tree Implementation with Python
Tree Implementation with Python List of List 代码如下: def binary_tree(val): return [val, [], []] def in ...
2018.4.23 git常用操作命令收集(转)
Git常用操作命令收集: 1. 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v ...
更多推荐
所有评论(0)