ios之performSelector 那点事

转载 2015年11月19日 23:39:41
在项目中,常常用到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多线程中performSelector: 和dispatch_time的不同

我们知道:只有主线程会在创建的时候默认自动运行一个runloop,并且有timer,普通的子线程是没有这些的。这样就带来一个问题了,有些时候我们并不确定我们的模块是不是会异步调用到,而我们在写这样的延...

performSelector 那点事

在项目中,常常用到performSelectorXXX之类的方法,而且有很多类似方法;今天就来召集一下! 1.performSelectorOnMainThread:withOb...

performSelector 那点事

在项目中,常常用到performSelectorXXX之类的方法,而且有很多类似方法;今天就来召集一下!1.performSelectorOnMainThread:withObject:waitUnt...

performSelector 那点事

在项目中,常常用到performSelectorXXX之类的方法,而且有很多类似方法;今天就来召集一下!   1.performSelectorOnMainThread:withObject:wa...

iOS时间那点事--NSCalendar + NSDateComponents

iOS时间那点事 NSCalendar + NSDateComponents 历法能使人类确定每一日再无限的时间中的确切位置并记录历史。日历,历法,一般历法都是遵循固定的规则的,具有周...

iOS开发Runtime那点事

runtime介绍runtime从字面上的意思理解就是运行时间,run(跑,运行)time(时间),在iOS中呢俗称运行时,它是一套底层的纯C语言API,属于一个C语言库,包含了很多底层的C语言API...

[转载] iOS开发分辨率那点事

1 iOS设备的分辨率 iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类 iPhone/iPod Touch 普屏分辨率    320像素 x 480...

【iOS学习笔记 15-12-31】 UIScrollview与Autolayout的那点事

原文转载自:http://adad184.com/2015/12/01/scrollview-under-autolayout/ UIScrollview与Autolayout的那点...

ios开发中动画那点事

一:UIKit动画在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了,C...

iOS开发:设计模式那点事

说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下。 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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