タイマーのイベント ハンドラー内のクラス プロパティへの読み取り/書き込みアクセスを提供したいだけでなく、イベント ハンドラーの外側のクラス内の他の場所でも同じプロパティを更新したいと考えています。正しいデータが読み取られ、更新されていることを確認するには、どのような予防措置を講じる必要がありますか?
一般的なロジックは次のとおりです。
// declared in the class header and initialized to 1 in init
@property (nonatomic, strong) NSNumber *sharedItem;
@property (nonatomic, assign) dispatch_source_t timer;
// Method invoked independent of the timer
- (void)doSomeWork {
// QUESTION: During a timer tick, will it access the correct version of
// sharedItem that is updated here?
// Do I need to protect this area with a critical section/lock?
sharedItem = [NSNumber numberWithInteger:[sharedItem intValue] + 1];
}
- (void)myTimerRelatedMethod {
// Creating the timer
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(self.timer, startTime, interval, leeway);
// Timer's event handler run for each tick
dispatch_source_set_event_handler(self.timer, ^{
if ([sharedItem intValue] > 10) {
// 1. Do something
// 2. Then cancel the timer
}
});
dispatch_resume(self.timer);
}