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的更多相关文章

  1. iOS 消息处理之performSelector

    ////  RootViewController.h//  DSCategories////  Created by dasheng on 15/12/17.//  Copyright © 2015年 ...

  2. iOS多线程中performSelector: 和dispatch_time的不同

    iOS中timer相关的延时调用,常见的有NSObject中的performSelector:withObject:afterDelay:这个方法在调用的时候会设置当前runloop中timer,还有 ...

  3. performSelector和respondsToSelector用法

    一.performSelector调用和直接调用区别 下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便 ...

  4. performSelector的原理以及用法

    一.performSelector调用和直接调用区别下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做 ...

  5. 手写一个更好用的performSelector/msgSend(详细修改版)

    这其实是一个NSInvocation练习作业 GitHub源码 vk_msgSend 引子 工作中难免会遇到一些场景,开发的时候不想引入整个头文件,但是又想调用一些方法 动态创建,动态调用看起来比较酷 ...

  6. performSelector:withObject:afterDelay: 精要概览(持续更新)

    - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; - ...

  7. objective-c "performSelector may cause a leak because its selector is unknown".

    #define SuppressPerformSelectorLeakWarning(Stuff) \ do { \ _Pragma("clang diagnostic push" ...

  8. ios之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法

    问题描述 项目中使用到了从字符串创建选择器,编译时发现警告:"performSelector may cause a leak because its selector is unknown ...

  9. warning:performSelector may cause a leak because its selector

    warning:performSelector may cause a leak because its selector     在ARC项目中使用 performSelector: withObj ...

随机推荐

  1. Java面试:1

    月薪10000以上: 1.了解Java的反射机制 2. 了解泛型的原理 3. 了解Spring框架的基本原理 4. 熟悉设计模式 5. 了解如斐波那契数列之类的简单算法月薪20000以上: 1. 精通 ...

  2. OF寄存器的判断

      1000 0000 ADD  1100 0000  10 1:符号位是否有进位  有则为1 2:最高有效数值位是否向符号位产生进位  有则为1 1 XOR 0=1所以PF=1

  3. 大公司的PHP面试题

    1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...

  4. win7安装Linux

    1. 新建分区必须为FAT32 (不是绿色的可用分区,只要linux安装时可以识别) 大小大于8G 2.打开ISO, 把casper文件夹下的initrd.lz vmlinuz 两个文件提取到C盘下 ...

  5. CentOS7—HAProxy安装与配置

    概述 Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux.配置防火墙 1.vi /etc/selinux/co ...

  6. 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)

    假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...

  7. 特征检测之Haar

    Harr特征, 主要用于人脸检测,可以参考我的博文 基于MATLAB的adaboost级联形式的人脸检测实现 1 harr特征的原理 2 haar特征的计算 3 haar特征的应用

  8. 【淘淘】Quartz作业存储与管理

    一.Quartz作业管理和存储方式简介: 作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数.如果你的作业是30分钟后或每30秒调用,这不是很有用.事实上,作业执行需要非常准确和即时调用在被调 ...

  9. HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)

    题意:有排成一行的n个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 题解:本来当n=1时, ...

  10. myeclipse 破解

    Myeclipse 2014 破解补丁,首先需要先下载 Myeclipse 2014 官方安装文件,下载地址 http://www.jb51.net/softs/150886.html,然后下载此补丁 ...