2017-08-25 102 views
-1
- (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"]; 
     }); 
} 

}我每次運行此代碼時爲什麼這個共存Objective-C代碼崩潰

,就會死機,誰能告訴我爲什麼?

+0

你應該保持你的隊列在'viewDidLoad'之外。 – clemens

回答

1

如果使用self.str非原子屬性, 那麼它將被所有線程訪問和修改, 我檢查這上面的代碼,這是崩潰原因的同時,通過其他的線程一個線程釋放對象試圖訪問它, 因爲版本,它對象崩潰。 如果你想使用線程安全然後請self.str原子財產。

+0

非常感謝你! – user3016644

+0

這個答案完全是誤導。原子性質與線程安全無關。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW1 –