2017-08-25 2 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"]; 
     }); 
} 

}Pourquoi ce crash simultané code c objectif

chaque fois que je lance ce code, il va planter, quelqu'un peut me dire pourquoi?

+0

Vous devriez garder votre file d'attente en dehors de 'viewDidLoad'. – clemens

Répondre

1

si vous avez utilisé self.str avec nonatomic propriété, il sera modifié et par accéder tous les fils, j'ai vérifié ce code ci-dessus, qui est la cause plantait sort objet d'un fil tout autre fil est essayer d'y accéder, raison de version qui l'objet se brisant. si vous voulez utiliser thread sûr puis s'il vous plaît faire atomique propriété de self.str.

+0

merci beaucoup! – user3016644

+0

Cette réponse est complètement trompeuse. Les propriétés atomiques n'ont rien à voir avec la sécurité des threads. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW1 –