天天看點

談談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.