PerformSelector
PerformSelector
1. 执行和取消
//执行
[self performSelector:@selector(showMessage) withObject:nil afterDelay:]; //取消
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showMessage) object:nil];
(1)PerformSelector与直接调用的区别
performSelector是运行时系统负责去找方法的,在编译时候不做任何校验;如果直接调用编译是会自动校验。如果上面例子中showMessage不存在,则performSelector方法会运行时崩溃。所以,使用performSelector方法之前,应该使用方法- (BOOL)respondsToSelector:(SEL)aSelector;进行安全检查,以保证程序的健壮性。
(2) performSelector与RunLoop
RunLoop有两种输入源:基于端口的输入源和自定义输入源。performSelector就是属于自定义输入源。使用performSelector时,就会把相应事件加到线程对应的RunLoop里进行管理。
(3) 取消performSelector
对于 [performSelector:withObject: afterDelay:];方法,afterDelay的时间设置后,performSelector的执行不会因为当前的viewController的灭亡而取消执行,因此需要在合适的时机cancel掉前面的PerformRequests。
2. 在主线程执行的方法
(1)performSelector在主线程执行
-(void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullableid)arg waitUntilDone:(BOOL)wait;
wait:指示要执行的aSelector方法是否马上执行。
如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;
设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。
如果当前线程就是主线程,无论设置为YES还是NO,aSelector方法都会马上执行。
(2)GCD的dispatch_async方法
dispatch_async(dispatch_get_main_queue, ^{
// do something
});
PerformSelector的更多相关文章
- iOS 消息处理之performSelector
//// RootViewController.h// DSCategories//// Created by dasheng on 15/12/17.// Copyright © 2015年 ...
- iOS多线程中performSelector: 和dispatch_time的不同
iOS中timer相关的延时调用,常见的有NSObject中的performSelector:withObject:afterDelay:这个方法在调用的时候会设置当前runloop中timer,还有 ...
- performSelector和respondsToSelector用法
一.performSelector调用和直接调用区别 下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便 ...
- performSelector的原理以及用法
一.performSelector调用和直接调用区别下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做 ...
- 手写一个更好用的performSelector/msgSend(详细修改版)
这其实是一个NSInvocation练习作业 GitHub源码 vk_msgSend 引子 工作中难免会遇到一些场景,开发的时候不想引入整个头文件,但是又想调用一些方法 动态创建,动态调用看起来比较酷 ...
- performSelector:withObject:afterDelay: 精要概览(持续更新)
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; - ...
- objective-c "performSelector may cause a leak because its selector is unknown".
#define SuppressPerformSelectorLeakWarning(Stuff) \ do { \ _Pragma("clang diagnostic push" ...
- ios之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
问题描述 项目中使用到了从字符串创建选择器,编译时发现警告:"performSelector may cause a leak because its selector is unknown ...
- warning:performSelector may cause a leak because its selector
warning:performSelector may cause a leak because its selector 在ARC项目中使用 performSelector: withObj ...
随机推荐
- js中数组连接concat()
数组连接concat() concat() 方法用于连接两个或多个数组.此方法返回一个新数组,不改变原来的数组. 语法 arrayObject.concat(array1,array2,...,arr ...
- spring集成常用技术的配置
使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不 ...
- 懵逼的闭包--for循环(转)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mybatis 书写
查询语句是使用 MyBatis 时最常用的元素之一 select元素配置细节如下 属性 描述 取值 默认 id 在这个模式下唯一的标识符,可被其它语句引用 parameterType 传给此语 ...
- AngularJS介绍
AngularJS介绍–AngularJS的前世今生 AngularJS是什么 在Web开发领域,我们一般使用HTML作为前端页面元素的声明式语言,使用CSS技术作为展示样式的描述语言,JavaScr ...
- Gamma校正与线性空间
基础知识部分 为了方便理解,首先会对(Luminance)的相关概念做一个简单介绍.如果已经了解就跳到后面吧. 我们用Radiant energy(辐射能量)来描述光照的能量,单位是焦耳(J),因为光 ...
- NPOIExcel
public class NPOIExcel { private string _title; private string _sheetName; private string _filePath; ...
- supervisor拉起daemon进程(falcon-agent)测试
falcon-agent started..., pid= falcon-agent now is running already, pid= falcon-agent now is running ...
- python excel操作
python操作excel表格(xlrd/xlwt)转载:http://www.cnblogs.com/zhoujie/p/python18.html 最近遇到一个情景,就是定期生成并发送服务器使 ...
- java调用sqlldr导入csv文件数据到临时表
package cn.com.file;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File; ...