首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS PerformSelector 遗漏问题

二 延迟执行 [obj performSelector:@selector(play) withObject:@"李周" afterDelay:4.f]; 该方法将延迟4秒后再执行play方法。...其实说到对时间方面的处理在项目中经常用到的是NSTimer:当一个NSTimer注册到Runloop后,Runloop会重复的在相应的时间点注册事件,当然Runloop为了节省资源并不会在准确的时间点触发事件...而performSelector:withObject:afterDelay:其实就是在内部创建了一个NSTimer,然后会添加到当前线程的Runloop中。...:@selector(test) withObject:nil afterDelay:2]; 如果在子线程中调用该performSelector延迟方法,会发现调用该延迟方法的子线程和test方法中执行的子线程是同一个...在回答完延迟方法之后,会将该方法和performSelector:withObject:作对比,那么performSelector:withObject:在不添加到子线程的Runloop中时是否能执行?

50810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    多线程(一) 有关死锁以及串行并发同步异步概念

    并发队列 (双行(多行)道路 可以超车 只要你可以) 可以让多个任务并发执行 (异步的时候可以超车 所以可以并发) 同步或者异步 (你有没有超车的能力) 是否具备开启新线程的能力 串行队列 (单行线) 任务一个接一个...:@selector(test) withObject:nil afterDelay:0]; NSLog(@"3"); }); } - (void) test { NSLog...performSelector: withObject: 底层调用[self msgSend]; performSelector: withObject:afterDelay; RunLoop相关 往RunLoop...里面添加一个定时器 解决办法:: 开启线程RunLoop 案例2 题目: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent...分析原因: block执行完毕后 线程没有开启RunLoop。所以线程销毁,销毁后再调用所以崩溃。

    74730

    2021年,大厂常问iOS面试题--Runloop篇

    当调用 NSObject 的 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程的 RunLoop 中。...8.PerformSelector:afterDelay:这个方法在子线程中是否起作用? 不起作用,子线程默认没有 Runloop,也就没有 Timer。...当一个硬件事件(触摸/锁屏/摇晃等)发生后,首先由 IOKit.framework 生成一个 IOHIDEvent 事件并由 SpringBoard 接收。这个过程的详细情况可以参考这里。...NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在阻塞状态,触发时间就会推迟到下一个runloop周期。...并且 NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间的延迟范围。

    1.9K10

    一个循环动画引起的内存泄露问题总结

    先说下该动画: 进入 AController 后,需要执行一个动画,该动画会执行以下步骤: 将一个 view 从左到右移动,动画时间 0.5s 上一步的动画完成后,将 view hidden 1 秒...:@selector(startBaseAnimation) withObject:nil afterDelay:pauseDuration];    } } 这里有两个问题: CABasicAnimation...) withObject:nil afterDelay:pauseDuration]; 第一个问题要么在 viewWillDisappear 时,手动置该 delegate 为 nil,要么对该 view...隐藏问题 这里还有一个隐藏的问题,就是发现 dealloc 方法,在 pop 页面时,有时能执行,有时不能执行,按理来说有执行了 performSelector 方法,应该是必现的问题。...:@selector(startBaseAnimation) withObject:nil afterDelay:pauseDuration];    } } 而什么时候为 NO 呢,顾名思义就是动画未完成

    2.4K20

    iOS小技能: 用纯代码开发界面的过程 & 图片使用的相关注意事项

    :在oc 中通常方法的第一个参数为:触发该方法的对象 --根据需要进行参数调整 1.2 不小心修改头文件的解决方法 对~/Library/Developer/Xcode/DerivedData 目录文件进行清理...[self performSelector:@selector(cleanUpAnimationsArray) withObject:nil afterDelay:self.imageList.animationDuration...); //动画结束之后清除帧动画数组 [self.imageList setAnimationImages:nil]; } 清除内存的代码简化 [self.imageList performSelector...:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageList.animationDuration]; III 常用快捷键...前后两行交换:command+option+[ 或 ] 不同窗口间切换:command+` 前进和后退:command+control+ → 或 ← 折叠代码块:command+option+ → 或

    35030

    iOS Programming – 触摸事件处理(2)

    不管时一个手指还是多个手指,轻击操作都会使每个触摸对象的tapCount加1,由于上面的例子不需要知道具体触摸对象的位置或时间等,因此可以直接调用touches的anyObject方法来获取任意一个触摸对象然后判断其...轻击操作很容易引起歧义,比如当用户点了一次之后,并不知道用户是想单击还是只是双击的一部分,或者点了两次之后并不知道用户是想双击还是继续点击。为了解决这个问题,一般可以使用“延迟调用”函数。...:@selector(setBackground:) withObject:[UIColor blueColor] afterDelay:2];         self.view.backgroundColor... = [UIColor redColor];     } } 上面代码表示在第一次轻击之后,没有直接更改视图的背景属性,而是通过performSelector:withObject:afterDelay...:方法设置2秒中后更改。

    93870

    多线程和GCD

    一个线程中任务的执行是串行的 如果要在一个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务 也就是说,在同一时间内,一个线程只能执行一个任务 比如在一个线程中下载三个文件(分别是文件A、文件B...延时执行 可以使用NSObject方法,该方法通常在哪个线程调用,就在哪个线程执行,一般是主线程 [self performSelector:@selector(run) withObject:nil...[self performSelector:@selector(runA) withObject:nil afterDelay:2.0]; } - (void)onBtnClicked { //在异步函数中执行...:@selector(runB) withObject:nil afterDelay:1.0]; }); NSLog(@"异步函数"); } - (void)runA { NSLog(@"...好吧..后面再研究一下RunLoop原理… dispatch_async(queue, ^{ [self performSelector:@selector(runB) withObject

    1.2K10
    领券