什么时候使用runloop 以及 performSelector 具体使用方法

本文深入探讨了Objective-C与Swift在iOS开发领域的应用与对比,旨在帮助开发者选择更适合自己的编程语言,同时了解两种语言在性能、易用性和社区支持等方面的差异。

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

runloop就不介绍了,度娘都告诉大家了,这里简单说一下什么时间点才使用runloop

首先run loop不需要创建,在线程中只需要调用[NSRunLoop currentRunLoop]就可以得到

如果你:

1. 使用port或是自定义的input source来和其他线程进行通信
2. 在线程(非主线程)中使用timer
3. 使用 performSelector…系列(如performSelectorOnThread, …)
4. 使用线程执行周期性工作

这些时候可以调用runloop

Run loop 是程序主线程基础设施的关键部分。所以,Cocoa 和 Carbon 程序提供了代码运行主程序的循环并自动启动 run loop。如果你使用 xcode 提供的模板创建你的程序,那你永远不需要自己去显 式的调用这些例程。

对于辅助线程,你需要判断一个 run loop 是否是必须的。如果是必须的,那么 你要自己配置并启动它。你不需要在任何情况下都去启动一个线程的 run loop。
 

performSelector这个方法对于初学者可能比较陌生,但是迟早你会遇到这个牛逼的方法,下面说一下关于performSelector都有哪些方法:

1、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

aSelector:方法名称

arg:参数(该方法有且只有一个参数,无参数可设为nil)

wait:BOOL值 当前线程若为主线程,aSelector立即执行;

当前若为分线程:YES:等待当前线程执行完毕,主线程执行aSelector;NO:aSelector立刻执行;


2、- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay


aSelector:方法名称

arg:参数(该方法有且只有一个参数,无参数可设为nil)

delay:aSelector方法延迟执行,单位(s)

注:以上在主线程上执行aSelector方法时,默认使用NSDefaultRunLoopMode模式;


3、performSelector可以访问未声明的方法

- (id)performSelector:(SEL)aSelector;

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

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

 
例:


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

    Person *person = [[Personalloc] init];

    [person performSelector:@selector(eat)];


}

@end


Person.h

@interface Person : NSObject

@end


Person.m

@implementation Person

void eat (idself, SEL sel)

{

    NSLog(@"吃饭了");

}

@end

另两个方法就不赘述了,方法类似。


@end
@end
@end
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值