谈谈iOS延迟调用--对比NSTimer、performSelector和dispatch_after

1.NSTimer是Foundation库提供的一个类,基于runloop实现.

可以只执行一次,也可定期反复执行(设置repeat参数).其中只执行一次时,执行后自动销毁.重复执行的,必须手动调用invalidate才能销毁.

使用时应注意:

1.)必须在有runloop的线程中使用.而根据runloop的特性,如果不处于Timer的mode时,就无法响应Timer事件.

2.)创建和销毁必须在同一线程.

3.)会对要执行方法的对象,造成强引用.容易产生循环引用.


2.performSelector是NSObject实现的成员方法.

依赖于NSTimer实现,故存在跟NSTimer的问题.

提供了功能的封装,故使用起来较方便.较NSTimer比,最大的问题是不能重复执行.


3.dispatch_after是GCD层面提供的c接口.

虽不存在NSTimer的一系列问题.该接口的最大问题就是:无法Cancel.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值