为什么这个并发的objective-c代码崩溃


- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10000; i++) {
dispatch_async(queue, ^{
self.str = [NSString stringWithFormat:@"asgdhjagsjhd"];
});
}

}

每次我运行这段代码,它都会崩溃,谁能告诉我为什么?

如果你使用具有非原子属性的self.str, 然后它将被所有线程访问和修改, 我检查了上面的代码,这是崩溃的原因,因为一个线程释放对象,而另一个线程试图访问它, 因为释放那个对象它崩溃了。 如果你想使用线程安全,那么请使self.str原子属性。

最新更新