J'essaie d'exécuter une méthode en arrière-plan, mais elle bloque toujours le programme. Voici mon code:Multithreading dans Objective-C
- (void)viewDidLoad
{
[super viewDidLoad];
self.MessagesList=[[MessagesArray alloc] init];
[self performSelectorInBackground:@selector(backgroundMethod) withObject:nil];
}
-(void)backgroundMethod
{
if ([MessagesList updateFromServer]){
[self.Table reloadData];
CFRunLoopRun();
}
}
Alors que updateFromServer envoie une requête HTTP au serveur et en attente d'une réponse, le serveur retarde la réponse de 10 secondes, et le résultat est que l'ensemble du programme est retardé de 10 secondes aussi. Pouvez-vous me corriger?
Mise à jour: J'ai ajouté une ligne d'exécution, mais le problème reste le même. La requête HTTP est asynchrone, mais tout de même - le programme entier attend jusqu'à ce que le serveur réponde. Ceci est ma méthode updateFromServer:
responseData = [NSMutableData data];
[self setBaseURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
return TRUE;
Comment puis-je faire asynchrone pour de vrai?
Pourquoi ne pas utiliser NSThread? –
Je l'ai essayé aussi. rien ne change. merci –