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

时间:2017-08-25 03:54:14

标签: objective-c concurrency grand-central-dispatch

- (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"];
        });
}

}

每次运行此代码时,它都会崩溃,任何人都可以告诉我原因吗?

1 个答案:

答案 0 :(得分:1)

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