Foundation框架发送消息
2015-06-05 04:56
441 查看
NSObject类定义了一个performSelect:实例方法家族,使用这些方法可以向对象发送消息。
下面两条语句是等价的:
[atom logInfo];
[atom performSelector:@selector(logInfo)];
performSelect:方法与标准对象消息的区别是,他使你能够发送在运行时确定的消息,因为变量选择器值可作为参数传递。NSObject类定义了多个performSelect:方法。当向对象发送消息时,这些方法提供额外的功能,具体如下:
(1).线程选择(当前、后台和用户指定的);
(2).方法调用语义(同步、分块);
(3).事件处理模式;
(4).延迟方法调用。
1.延迟一定时间后在当前线程上发送消息:
例如:
[atom performSelector:@selector(logInfo) withObject:nil afterDelay:5.0];//在5秒后向对象发送消息
2.在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)。默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。
aSelector:要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。
arg:要传递的参数,如果无参数,就设为nil。
wait:要执行的aSelector方法,是否马上执行。
如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;
设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。
如果,当前线程就是主线程,那么aSelector方法会马上执行。
该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。
下面两条语句是等价的:
[atom logInfo];
[atom performSelector:@selector(logInfo)];
performSelect:方法与标准对象消息的区别是,他使你能够发送在运行时确定的消息,因为变量选择器值可作为参数传递。NSObject类定义了多个performSelect:方法。当向对象发送消息时,这些方法提供额外的功能,具体如下:
(1).线程选择(当前、后台和用户指定的);
(2).方法调用语义(同步、分块);
(3).事件处理模式;
(4).延迟方法调用。
1.延迟一定时间后在当前线程上发送消息:
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
inModes:(NSArray *)modes
例如:
[atom performSelector:@selector(logInfo) withObject:nil afterDelay:5.0];//在5秒后向对象发送消息
2.在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)。默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
modes:(NSArray *)array
aSelector:要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。
arg:要传递的参数,如果无参数,就设为nil。
wait:要执行的aSelector方法,是否马上执行。
如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;
设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。
如果,当前线程就是主线程,那么aSelector方法会马上执行。
该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。
相关文章推荐
- Shell 基础
- ubuntu 取消打印队列命令
- [hdu4599]期望DP
- Climbing Stairs
- Maximal Square
- HackerRank - "Stars"
- Codeforces Round #306 (Div. 2)
- Codeforces Round #306 (Div. 2) E. Brackets in Implications 构造
- Android开发记录20-获取缓存大小和清除缓存功能
- Jquery on() load event on a single element
- vsftpd之虚拟用户相关
- Codeforces Round #306 (Div. 2) D. Regular Bridge 构造
- Codeforces Round #306 (Div. 2) C. Divisibility by Eight 暴力
- Codeforces Round #306 (Div. 2) C
- Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs
- Codeforces Round #306 (Div. 2) B
- Codeforces Round #306 (Div. 2) A. Two Substrings 水题
- Java课程实验报告 实验三 敏捷开发与XP实践
- Codeforces Round #306 (Div. 2) A
- 线索二叉树