Wie kann ich eine statische Methode asynchron aufrufen?Wie kann ich eine statische Objective-c-Methode asynchron aufrufen?
+ (void) readDataFromServerAndStoreToDatabase
{
//do stuff here
//might take up to 10 seconds
}
Wie kann ich eine statische Methode asynchron aufrufen?Wie kann ich eine statische Objective-c-Methode asynchron aufrufen?
+ (void) readDataFromServerAndStoreToDatabase
{
//do stuff here
//might take up to 10 seconds
}
Sie this method gegen das Klassenobjekt verwenden können. Angenommen, Sie
@interface MyClass:NSObject{
....
}
+ (void) readAndStoreDataToDatabase;
@end
haben und dann tun
NSThread*thread=[NSThread detachNewThreadSelector:@selector(readAndStoreDataToDatabase)
target:[MyClass class]
withObject:nil ];
Beachten Sie, dass die Klasse Objekt einer Klasse zu erben von NSObject
ist ein NSObject
, so können Sie es auf diese Methoden übergeben. Sehen Sie selbst durch dieses Programm ausgeführt wird:
#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];
}
Der Punkt ist, dass in Objective-C, Klasse Methoden (die statischen Methoden in C++ genannt werden) sind nur Standardmethoden auf das Klassenobjekt gesendet. Weitere Informationen zu Klassenobjekten finden Sie in diesen großartigen Blogposts von Hamster und Cocoa with Love.
Richtig, aber ich würde wetten, dass der Fragesteller keine Ahnung hat, wie viel Seil sie gerade übergeben wurden. ;) – bbum
Ich habe, ich habe eine Menge Threading zuvor getan, ich wusste nur nicht, dass es möglich war, eine statische Methode durch einen Thread aufzurufen, so das Schlüsselwort hier war [MyClass-Klasse] – aryaxt
Es gibt keine solche Sache wie ein ' static' Methode in Objective-C :) Sie sind 'Klassenmethoden' und werden' dynamisch' an das Klassenobjekt gesendet. Sobald Sie das verstanden haben, ist es ganz natürlich, dass Sie das tun können. – Yuji
In objective-C gibt es mehrere Möglichkeiten, die Nebenläufigkeit zu erreichen, abhängig von der Umgebung, in der Sie arbeiten. Pthreads, NSThreads, NSOperations, GCD & Blöcke haben ihren Platz. Sie sollten Apples "Concurrency Programming Guide" für die Plattform lesen, auf die Sie ausgerichtet sind.
+1 für die Erwähnung der breiten Auswahl von Optionen und die entsprechende Anleitung –
Es gibt keine statische Methode. Dies ist ein Beispiel für eine Klassenmethode, die an die Klasse und nicht an eine Instanz gesendet wird. Beachten Sie, wie es noch an etwas gesendet wird. Das sollte Ihnen einen Hinweis geben, wie Sie tun können, was Sie wollen (oder lesen Sie Mipadis Antwort). – JeremyP