- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument
afterDelay:(NSTimeInterval)delay;
![](https://img.haomeiwen.com/i7205173/ee591d7e064619c9.png)
![](https://img.haomeiwen.com/i7205173/22283a4e190f413f.png)
![](https://img.haomeiwen.com/i7205173/83e38bd0519a1718.png)
![](https://img.haomeiwen.com/i7205173/3d547152f81472a5.png)
![](https://img.haomeiwen.com/i7205173/a28a4775b7ff365e.png)
![](https://img.haomeiwen.com/i7205173/71c98a8f5be3be02.png)
![](https://img.haomeiwen.com/i7205173/3a68c4e340400882.png)
[self performSelector:@selector(test) withObject:nil afterDelay:1.0];底层实现原理
是用到了NSTimer定时器。而定时器是要添加到runloop里面去的。所以这行代码的本质就是添加了一个定时器
放到runloop里面去。也就是往runloop里面添加了一个定时器
![](https://img.haomeiwen.com/i7205173/786bd9c7f26cc736.png)
![](https://img.haomeiwen.com/i7205173/76f1c3a68b26c467.png)
=========[self performSelector:@selector(test) withObject:nil afterDelay:1.0]的底层源码======
![](https://img.haomeiwen.com/i7205173/a790bcc3581e3832.png)
![](https://img.haomeiwen.com/i7205173/3987864a6bacaf07.png)
![](https://img.haomeiwen.com/i7205173/f11a186ba65e8bb7.png)
![](https://img.haomeiwen.com/i7205173/3da4f7d56533155a.png)
runloop 在跑起来之前,runloop里面必须有东西,才行!
![](https://img.haomeiwen.com/i7205173/e67fc7f5e2eac5f3.png)
![](https://img.haomeiwen.com/i7205173/53eddd0b75dc205b.png)
![](https://img.haomeiwen.com/i7205173/a755a5728cb2d0d9.png)
![](https://img.haomeiwen.com/i7205173/00854ea37a1b85d8.png)
![](https://img.haomeiwen.com/i7205173/1f070ceffb9bbad9.png)
![](https://img.haomeiwen.com/i7205173/241d71761057ef18.png)
网友评论