performSelector 那点事

转载 2015年07月07日 17:38:17
在项目中,常常用到performSelectorXXX之类的方法,而且有很多类似方法;今天就来召集一下!

1.performSelectorOnMainThread:withObject:waitUntilDone:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait


在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)。

默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。

参数:

aSelector:要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。


arg:要传递的参数,如果无参数,就设为nil


wait:要执行的aSelector方法,是否马上执行。

如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;

设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。

如果,当前线程就是主线程,那么aSelector方法会马上执行。


该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。



2.performSelector:withObject:afterDelay:

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


在当前线程中执行指定的方法,使用默认模式,并指定延迟。

参数:

aSelector:指定的方法。含义同上,不在赘述。

anArgument:同上

delay:指定延迟时间(秒)。


3.performSelector


我们常常用到以下3个方法,分别为:


 

- (id)performSelector:(SEL)aSelector;

- (id)performSelector:(SEL)aSelector withObject:(id)object;

- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;


首先,定义要调用的方法


 

- (void)methodNoParam{

    NSLog(@"methodNoParam");

}


- (void)methodWithOneParam:(id)paramFirst{

    NSLog(@"methodWithOneParam: %@", paramFirst);

    

}


- (void)methodWithParams:(id)paramFirst andParamSecond:(id) paramSecond{

     NSLog(@"methodWithOneParam: %@,%@", paramFirst,paramSecond);

           

}


其次,进行调用

// 没有参数

    BOOL isNoParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodNoParam)];

    if (isNoParam) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodNoParam)];

    }

    

    // 一个参数

    BOOL isOneParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithOneParam:)];

    if (isOneParam) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodWithOneParam:) withObject:@"firsht"];

    }

    

    // 二个参数

    BOOL isParams= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithParams: andParamSecond:)];

    if (isParams) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodWithParams: andParamSecond:) withObject:@"first"withObject:@"second"];

    }



So easy!!!


补充:

Run loop 相当于 win32 里面的消息循环机制,它可以让你根据事件/消息(鼠标消息,键盘消息,触摸事件,计时器消息等)来调度线程。 

比如:在触摸 UIView 时之所以能够激发 touchesBegan/touchesMoved 等等函数被调用。系统会自动为应用程序的主线程生成一个与之对应的 run loop 来处理其消息循环。让调用更加简单。也避免了繁琐,复杂的操作。


一句话:Run loop是一种消息处理机制!


IOS 取消延迟执行函数 perform selector

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(xxxx) object:nil];  


《小老爷们那点事儿》终极整理贴 (已完结)

《小老爷们那点事儿》终极整理贴  (已完结) 以下是分帖链接地址 小老爷们那点事儿整理帖之一 http://www.tulaoya.cn/bbs/read.php?tid=4 小老爷们那点事儿整理帖之...
  • metababy
  • metababy
  • 2007年08月24日 13:32
  • 18467

performSelector 那点事

在项目中,常常用到performSelectorXXX之类的方法,而且有很多类似方法;今天就来召集一下! 1.performSelectorOnMainThread:withObject:wai...
  • cctvzxxz1
  • cctvzxxz1
  • 2014年10月14日 20:53
  • 365

Java程序员,上班那点事儿

清华大学出版社《Java程序员,上班那点事儿》作者:钟声 章节:1.1小节      我们刚刚进入本书的正题就拿出一个俗不可耐“钱”字来和大家大谈特谈,未免不雅。但是,我还是要在一开始就要说这个问题,...
  • jxf111348
  • jxf111348
  • 2009年08月18日 20:01
  • 427

IT外企那点儿事完整版

第一章:外企也就那么回儿事 (http://blog.csdn.net/forfuture1978/article/details/5547537) 1.1 高薪 1.2 人性化 1.3 浮动工...
  • forfuture1978
  • forfuture1978
  • 2013年09月20日 13:55
  • 5075

多线程那些事

多线程
  • qq_33344834
  • qq_33344834
  • 2016年07月28日 14:06
  • 204

Kafka的那些事儿

What’s Kafka?简要使用手册安装 版本 从官网获取到安装包,kafka_2.12-0.10.2.1.tgz。说明下版本:kafka_后面的代表了scala的版本与kafka的版本使用一个”...
  • eugeneheen_chen
  • eugeneheen_chen
  • 2017年05月11日 16:31
  • 444

从from or form说起,谈谈那些关于bug的事情

这篇博客,从我前段时间开发项目中出现的一个bug说起。一个把from写成form的bug说起                 一个不起眼的错误,可能是手误,可能是长期敲错导致坏习惯,也...
  • lfsf802
  • lfsf802
  • 2011年02月10日 08:40
  • 5855

Netty那点事(一)概述

Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io。关于Mina已...
  • zhangrongchao_
  • zhangrongchao_
  • 2015年05月28日 17:42
  • 571

Netty那点事(二)Netty中的buffer

http://my.oschina.net/flashsword/blog/164237
  • working_brain
  • working_brain
  • 2015年03月23日 17:17
  • 472

驾考那点事儿(经验分享)

去年十月份从腾讯回来,想着距离过年还有三个月的时间,反正没什么事儿,应该可以把驾照拿下。然而,我太天真了,驾校那些人在你报名前说的那些承诺都是骗人的,更为可笑的是当时我居然还信以为真了。稀里糊涂报了名...
  • ljiabin
  • ljiabin
  • 2013年05月17日 21:09
  • 1843
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:performSelector 那点事
举报原因:
原因补充:

(最多只允许输入30个字)