ios - 关于GCD定时器无效
PHPz
PHPz 2017-04-18 09:24:44
0
1
309

在使用GCD定时器时,系统的代码块并不好用

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
    NSLog(@"+++++定时器+++++");
});
dispatch_resume(timer);

只有将 dispatch_source_t timer 写成属性handle event才会被调用

@property (nonatomic, strong) dispatch_source_t timer;

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(_timer, ^{
    NSLog(@"+++++定时器+++++");
});
dispatch_resume(_timer);

这是为什么呢?

PHPz
PHPz

学习是最好的投资!

全員に返信(1)
Ty80

メモリ管理... ARCなので、作成したオブジェクトはそのスコープ内で有効ですが、そのスコープから外れると、強い参照がなければオブジェクトは自然に破棄されます。使用理由を属性として記述できます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート