@interface ViewController ()
@property (nonatomic,readwrite,weak) IBOutlet UILabel *label;
@property (nonatomic,readwrite,assign) NSUInteger count;
@property (nonatomic,readwrite,strong) dispatch_queue_t queue;
@property (nonatomic,readwrite,assign) BOOL shouldRun;
@end
@implementation ViewController
{
NSUInteger _count;
}
- (void)addNextOperation
{
__weak typeof(self) myself = self;
double delayInSeconds = 1.0;
//何时启动,间隔
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds*NSEC_PER_MSEC);
//timer触发的时候,需要做的动作
dispatch_after(popTime, self.queue, ^(void){
myself.count = myself.count+1;
[self addNextOperation];
});
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创建并发队列(相当于互斥锁)
self.queue = dispatch_queue_create("net.robnapier.SimpleGCD.ViewController", DISPATCH_QUEUE_CONCURRENT);
self.count = 0;
[self addNextOperation];
}
- (NSUInteger)count
{
__block NSUInteger count;
dispatch_sync(self.queue, ^{
count = _count;
});
return count;
}
- (void)setCount:(NSUInteger)count
{
//设置Count dispatch_barrier_async 确保写入的互斥访问
dispatch_barrier_async(self.queue, ^{
_count = count;
});
//界面UI的操作,使用主线程队列
dispatch_barrier_async(dispatch_get_main_queue(), ^{
self.label.text = [NSString stringWithFormat:@"%d",count];
});
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end