performSelector额外的消息响应机制

原创 2013年12月04日 17:52:46


SEL与@selector

可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.它的结果是一个SEL类型。


所以,我们可以实例化一个SEL:

SEL sel=@selector(function);

-------------

performSelector也就是主动调用SEL的方式,分为以下几种:

1:定义在NSObject中的:

- (id)performSelector:(SEL)aSelector;

对应的方法无参数。

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

对应一个参数的方法。

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

对应两个参数的方法。

如果单单只看这三个方法,似乎没有什么意义去使用这个东西来调用方法,因为完全可以直接使用self来调用对应的方法,而不需要使用SEL啊。


2:延时调用:

所以,performSelector还有其它功能,例如,延时多少秒之后再调用某个SEL;(在当前线程的Run loop中)

performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval)

performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval) inModes:(NSArray *)

这里的Mode参参考run loop mode;

而且它们可以被终止:

+ ( void )cancelPreviousPerformRequestsWithTarget:( id )aTarget selector:( SEL)aSelector object:( id )anArgument;

+ ( void )cancelPreviousPerformRequestsWithTarget:( id )aTarget;

3:线程相关:

performSelectorInBackground:(SEL) withObject:(id)

在后台执行某个SEL操作,一般用于异步加载网络数据,不阻塞UI.(这个方法每调用一次都会在后台新建一个线程执行对应的SEL。)

这个方法对应的是:

performSelectorOnMainThread:(SEL) withObject:(id) waitUntilDone:(BOOL)

也就是在生成的线程中判断,如果当前线程结束了,也就是加载数据完成了就调用主线程的某个SEL来对UI进行刷新。


performSelector:(SEL) onThread:(NSThread *) withObject:(id) waitUntilDone:(BOOL

指定线程执行某个SEL。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

oc中消息传递机制-附:对performSelector方法的扩充

各种语言都有些传递函数的方法:C语言中可以使用函数指针,C++中有函数引用、仿函数和lambda,Objective-C里也有选择器(selector)和block。 不过由于iOS SDK中的大部...

ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的

今天某人问我ActiveMQ的ACK机制,蒙圈儿,好几年没看了,忘的差不多了,赶紧找个文档补充补充,要不落伍了-_#...
  • xzknet
  • xzknet
  • 2017年07月04日 17:13
  • 2335

Objective-C中一种消息处理方法performSelector: withObject:

Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的...
  • lynjay
  • lynjay
  • 2012年07月02日 14:01
  • 529

iOS 【消息处理 performSelector】

消息处理之performSelector

ios的消息传递—— performSelector

Objective-C中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候...

iOS笔记之--消息处理之performSelector

performSelector和直接调用方法的区别 performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明...

VC++深入详解+FC消息响应机制.7z

  • 2010年04月25日 23:42
  • 7.83MB
  • 下载

消息处理之performSelector

performSelector和直接调用方法的区别 performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明...

performSelector和forwardInvocation之消息的派发和转发

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

MFC消息响应机制文档

  • 2011年01月07日 15:08
  • 42KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:performSelector额外的消息响应机制
举报原因:
原因补充:

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