#import "ViewController.h"
@interface ViewController ()
@property (atomic, copy) NSMutableArray *testArray;
@end
@implementation ViewController {
}
- (void)viewDidLoad {
[super viewDidLoad];
self.testArray = [NSMutableArray array];
//创建自定义并行队列
dispatch_queue_t queue = dispatch_queue_create("com.gcdTest.queue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0 ; i < 1000; i ++) {
dispatch_async(queue, ^{
[self.testArray addObject:@"1"];
});
dispatch_async(queue, ^{
NSLog(@"--------%@--------", self.testArray);
});
dispatch_async(queue, ^{
[self.testArray addObject:@"1"];
});
}
}
这是程序就会闪退
#import "ViewController.h"
@interface ViewController ()
@property (atomic, copy) NSMutableArray *testArray;
@end
@implementation ViewController {
}
- (void)viewDidLoad {
[super viewDidLoad];
self.testArray = [NSMutableArray array];
//创建自定义并行队列
dispatch_queue_t queue = dispatch_queue_create("com.gcdTest.queue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0 ; i < 1000; i ++) {
dispatch_async(queue, ^{
self.testArray = [@[@"1", @"2"] mutableCopy];
});
dispatch_async(queue, ^{
NSLog(@"--------%@--------", self.testArray);
});
dispatch_async(queue, ^{
self.testArray = [@[@"2"] mutableCopy];
});
}
}
这样只是操作了testArray 的set getter 方法,就不会闪退,atomic本身只是在set和getter时加了一把锁
网友评论