J'ai un fil principal et un fil auxiliaire dans mon application. Le fil principal, comme tout le monde le sait, est utilisé par l'interface utilisateur. J'utilise le thread secondaire pour faire le chargement en arrière-plan de mes vues. J'ai un contrôleur principal que j'appelle un contrôleur fictif. De là, j'appelle mon contrôleur principal, qui est en mode paysage.fil secondaire concernant
Donc, fondamentalement, ce que je dois faire est, quand je tourne mon contrôleur fictif, je veux être en mesure de charger mon contrôleur paysage principal et vice versa.
Tout fonctionne correctement lorsque je tourne de faux à principal. Le principal a une série de contrôleurs enfants à charger, donc j'ai mis ce processus sur un thread secondaire, et à ce moment ils sont en train de charger je montre un écran loader.
Le mannequin est un contrôleur de vue normal et le principal est un contrôleur de vue modale.
Maintenant le problème.
Si un utilisateur essaie de faire pivoter le formulaire dummy -> main, la méthode de rotation déclenche l'initialisation du contrôleur de vue principal. Mais pour une raison quelconque, l'utilisateur change d'avis et tourne en arrière de la forme principale -> dummy idéalement, la transition devrait être lisse car le thread de l'interface utilisateur (principal theread) est libre. Qu'est-ce qui se passe est l'interface utilisateur tourne en arrière. Mais puisque le thread secondaire sur le contrôleur principal est toujours activé, même après que le contrôleur modal de rejet est appelé sur le MainController par le thread principal, lorsque nous appelons la fonction willRotate.
J'ai lu dans divers articles que nous ne pouvons pas simplement tuer le thread secondaire, car nous devons nettoyer les choses nous-mêmes. Alors quelqu'un peut-il me guider à travers le code, comment puis-je tuer mon thread secondaire et faire le nettoyage avant de revenir à mon formulaire d'appel .. ?? C'est un peu urgent ... s'il vous plaît ne pas pointer vers d'autres sujets de discussion, car j'ai déjà visité ceux-ci.
Je veux spécifiquement savoir comment devrais-je arrêter mon thread secondaire, sans provoquer un accident. merci.
-(void)viewDidLoad {
[super viewDidLoad];
workingThread = [[NSThread alloc]initWithTarget:self selector:@selector(parseMainTextFile) object:nil];
[workingThread start];
[NSThread detachNewThreadSelector:@selector(addLoader) toTarget:self withObject:nil];
//[self performSelectorOnMainThread:@selector(parseMainMatchTextFile) withObject:nil waitUntilDone:NO];
}
Que voulez-vous dire par "chargement en arrière-plan de [vos] vues"? UIKit n'est pas thread-safe (sauf dans un très petit nombre de circonstances). Il n'est pas prudent de charger vos vues sur un autre thread. –
désolé le mot correct serait l'initialisation de fond de mon point de vue. – swapnil
Avez-vous modifié la question? Ici, le fil de travail est mon fil secondaire. Et parseMainTextFile: est la fonction de lancement de thread. Cette méthode a une série d'autres méthodes, qui initialisent les contrôles enfants. J'espère que la scène est un peu plus claire. – swapnil