Foundation框架发送消息

本文详细介绍了Objective-C中NSObject类的performSelect:家族方法的使用,包括延迟消息发送、线程选择、方法调用语义和事件处理模式等功能。通过示例代码展示了如何在不同场景下利用这些方法实现高效、灵活的对象消息发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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的修改。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值