您的位置:首页 > 其它

Foundation框架发送消息

2015-06-05 04:56 441 查看
NSObject类定义了一个performSelect:实例方法家族,使用这些方法可以向对象发送消息。

下面两条语句是等价的:

[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的修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: