Come posso chiamare un metodo statico in modo asincrono?Come posso chiamare un metodo statico Objective-c in modo asincrono?
+ (void) readDataFromServerAndStoreToDatabase
{
//do stuff here
//might take up to 10 seconds
}
Come posso chiamare un metodo statico in modo asincrono?Come posso chiamare un metodo statico Objective-c in modo asincrono?
+ (void) readDataFromServerAndStoreToDatabase
{
//do stuff here
//might take up to 10 seconds
}
È possibile utilizzare this method contro l'oggetto della classe. Supponiamo di avere
@interface MyClass:NSObject{
....
}
+ (void) readAndStoreDataToDatabase;
@end
e poi fare
NSThread*thread=[NSThread detachNewThreadSelector:@selector(readAndStoreDataToDatabase)
target:[MyClass class]
withObject:nil ];
Si noti che l'oggetto di classe di una classe che eredita da NSObject
è un NSObject
, in modo da poter passare a questi metodi. Vedere da solo eseguendo questo programma:
#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];
}
Il punto è che, in Objective-C, metodi di classe (che sono chiamati metodi statici in C++) sono solo metodi standard inviati all'oggetto classe. Per ulteriori informazioni sugli oggetti di classe, guarda questi fantastici post del blog da Hamster e da Cocoa with Love.
Esatto, ma scommetterei che l'interrogante non ha idea di quanta corda abbiano appena ricevuto. ;) – bbum
Sì, ho fatto un sacco di threading prima, non sapevo che fosse possibile chiamare un metodo statico attraverso un thread, quindi la parola chiave qui era [classe MyClass] – aryaxt
Non esiste una cosa come una ' metodo static' in Objective-C :) Sono 'metodi di classe', e vengono inviati' dinamicamente' all'oggetto classe. Una volta capito, è perfettamente naturale che tu possa farlo. – Yuji
Esistono diversi modi per realizzare la concorrenza nell'obiettivo-C, a seconda dell'ambiente in cui si sta eseguendo. Pthreads, NSThreads, NSOperations, GCD & tutti hanno il loro posto. Dovresti leggere la "Guida alla programmazione della concorrenza" di Apple per qualsiasi piattaforma tu abbia scelto come target.
+1 per menzionare l'ampia scelta di opzioni e la guida pertinente –
Non esiste un metodo statico. Questo è un esempio di un metodo di classe che viene inviato alla classe, non un'istanza. Nota come è ancora inviato a qualcosa. Questo dovrebbe darti un'idea di come fare ciò che vuoi (o leggere la risposta di mipadi). – JeremyP