2010-09-29 9 views
6

Comment appeler une méthode statique de manière asynchrone?Comment appeler une méthode statique Objective-c de manière asynchrone?

+ (void) readDataFromServerAndStoreToDatabase 
{ 
    //do stuff here 
    //might take up to 10 seconds 
} 
+0

Il n'existe pas de méthode statique. Ceci est un exemple d'une méthode de classe qui est envoyée à la classe, pas une instance. Notez comment il est encore envoyé à quelque chose. Cela devrait vous donner une idée de comment faire ce que vous voulez (ou lire la réponse de Mipadi). – JeremyP

Répondre

16

Utilisez un NSThread:

[NSThread detachNewThreadSelector:@selector(readDataFromServerAndStoreToDatabase) 
         toTarget:[MyClass class] 
         withObject:nil]; 
+0

Je ne sais pas pourquoi ceci a été rejeté. Il a succinctement et directement répondu à la question. – bbum

+0

Je suis d'accord donc + 1. – JeremyP

3

Vous pouvez utiliser this method contre l'objet de classe. Supposons que vous ayez

@interface MyClass:NSObject{ 
.... 
} 
+ (void) readAndStoreDataToDatabase; 
@end 

puis faites

NSThread*thread=[NSThread detachNewThreadSelector:@selector(readAndStoreDataToDatabase) 
              target:[MyClass class] 
             withObject:nil ]; 

Notez que l'objet de classe d'une classe héritant de NSObject est un NSObject, de sorte que vous pouvez passer à ces méthodes. Voir par vous-même en exécutant ce programme:

#import <Foundation/Foundation.h> 

int main(){ 
    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init]; 
    NSString* [email protected]"foo"; 
    if([foo isKindOfClass:[NSObject class]]){ 
     NSLog(@"%@",@"YES"); 
    }else{ 
     NSLog(@"%@",@"NO");  
    } 
    if([[NSString class] isKindOfClass:[NSObject class]]){ 
     NSLog(@"%@",@"YES"); 
    }else{ 
     NSLog(@"%@",@"NO");  
    } 
    [pool drain]; 
} 

Le point est que, en Objective-C, les méthodes de classe (qui sont appelées méthodes statiques en C++) ne sont que des méthodes standard envoyées à l'objet de classe. Pour en savoir plus sur les objets de classe, consultez ces articles de blog par Hamster et par Cocoa with Love.

+0

Correct, mais je parie que le questionneur n'a aucune idée de la quantité de corde qu'ils viennent de recevoir. ;) – bbum

+0

J'ai fait beaucoup de threads avant, je ne savais pas qu'il était possible d'appeler une méthode statique à travers un thread, donc le mot-clé ici était [classe MyClass] – aryaxt

+0

Il n'y a rien de tel méthode static' en Objective-C :) Ce sont des 'méthodes de classe', et elles sont envoyées dynamiquement à l'objet de la classe. Une fois que vous obtenez cela, il est parfaitement naturel que vous puissiez le faire. – Yuji

6

Il existe plusieurs façons d'effectuer une simultanéité dans l'objectif C, en fonction de l'environnement dans lequel vous vous trouvez. Pthreads, NSThreads, NSOperations, GCD & ont tous leur place. Vous devriez lire le «Guide de programmation de concurrence» d'Apple pour la plate-forme que vous ciblez.

+0

+1 pour avoir mentionné le large choix d'options et le guide correspondant –

Questions connexes