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
}
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
}
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.
Correct, mais je parie que le questionneur n'a aucune idée de la quantité de corde qu'ils viennent de recevoir. ;) – bbum
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
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
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.
+1 pour avoir mentionné le large choix d'options et le guide correspondant –
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