J'ai une sorte de question simple. J'écris un programme Objective-C avec un peu de multithreading. J'ai un NSArray global, et j'ajoute des objets dans ce NSArray à partir d'une méthode qui est appelée dans un nouveau thread. Si les objets que j'ajoute dans ce NSArray sont de nouveaux objets créés dans cette méthode (local), cela créera-t-il un accès mémoire et/ou d'autres problèmes ou le garbage collector sera-t-il assez intelligent pour garder ces objets jusqu'à ce qu'ils n'aient plus de références? Aussi, si je veux un objet dans ce NSArray, cet objet sera-t-il passé par référence ou par valeur?Multithreading Objective-C et des conteneurs de données
Répondre
- Pouvez-vous ajouter des objets dans NSArray? Je suppose que vous voulez dire NSMutableArray. NSMutableArray n'est pas sûr pour les threads. Vous devrez donc peut-être acquérir un verrou avant d'essayer de le modifier. Bien que cela dépendra principalement de la façon dont vos threads travaillent sur des données partagées. NSArray ou NSMutableArray conservent les objets qu'ils contiennent. Donc, après l'ajout, vous pouvez libérer la copie locale.
- Le tableau stockera la référence.
Espérons que cela aide. En général, le multithreading est beaucoup plus difficile qu'une application unique. Veuillez vérifier Threading Programming Guide pour les détails. Cela peut vous éviter de nombreux dangers.
Il ne devrait pas y avoir de problèmes avec le design que vous décrivez. Tous vos threads partagent le même espace mémoire, donc tout ira bien. Le système de gestion de la mémoire fera "la bonne chose", mais je recommande d'apprendre la méthode retenir/libérer - il n'y a rien de mieux que réellement comprendre ce que votre programme est en train de faire. Objective-C est une valeur de passe seulement, tout comme C. Cela dit, les objets ne sont jamais transmis que par des pointeurs en Objective-C, donc on peut toujours penser à ça dans ce sens.
Merci! Je viens de mettre à jour mon message avec une autre question. Pourriez-vous jeter un coup d'œil à celui-là aussi? – hassaanm
@hassaanm, édité. Méfiez-vous des problèmes de threading potentiels que mentionne @taskinoor dans sa réponse. –
Cela ne devrait pas être downvoted. Il contient également des informations utiles et rien n'est techniquement faux. – taskinoor
- 1. Multithreading brisé avec des données de base
- 2. Multithreading et exécution des délégués
- 3. alloca et ObjectiveC Garbage Collector
- 4. multithreading et classes?
- 5. Analyseur AMF0 dans ObjectiveC
- 6. nouveau et supprimer des conteneurs Dlls
- 7. multithreading et multitraitement
- 8. MultiThreading et Deadlock
- 9. const et conteneurs STL
- 10. Entity Framework et multithreading
- 11. multithreading et booléens
- 12. GLUT et multithreading
- 13. Vaadin table hide personnalisation des colonnes et des conteneurs
- 14. GCC arbre conteneurs de données STL
- 15. Java multithreading et héritage
- 16. Débogage des conteneurs TBB d'Intel
- 17. Multithreading avec ASP.NET et IIS
- 18. Cadre Zend et conteneurs de navigation personnalisés
- 19. Itération et conteneurs de pointeurs intelligents
- 20. Pools d'applications IIS et multithreading
- 21. NSString question ObjectiveC
- 22. Personnalisation de writeToFile dans ObjectiveC
- 23. Droite Float et conteneurs div
- 24. Page maître ASP.NET et conteneurs
- 25. GC.Collect et multithreading en C#
- 26. Pratiques de multithreading et méthodes utilisant C#
- 27. Explication des extensions Python multithreading
- 28. Combine chaîne en ObjectiveC
- 29. Combinaison de conteneurs MEF et IoC
- 30. Multithreading et concurence avec C#
Qu'entendez-vous par "accès mémoire"? Voulez-vous dire "condition de course"? – vodkhang
Carl a déjà répondu à ma question, mais je veux dire, est-ce que je vais jamais accéder à un emplacement de mémoire qui est hors de ma portée ou à un emplacement auquel je n'ai pas accès en dehors du thread qui a créé l'objet. – hassaanm