Как я могу вызвать статический метод Objective-C асинхронно? - PullRequest
6 голосов
/ 29 сентября 2010

Как я могу вызвать статический метод асинхронно?

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

Ответы [ 3 ]

16 голосов
/ 29 сентября 2010

Используйте NSThread:

[NSThread detachNewThreadSelector:@selector(readDataFromServerAndStoreToDatabase)
                         toTarget:[MyClass class]
                       withObject:nil];
6 голосов
/ 29 сентября 2010

Существует несколько способов достижения параллелизма в target-C, в зависимости от среды, в которой вы работаете. У pthreads, NSThreads, NSOperations, GCD и блоков есть свое место.Вам следует прочитать «Руководство по программированию параллелизма» Apple для любой платформы, на которую вы ориентируетесь.

3 голосов
/ 29 сентября 2010

Вы можете использовать этот метод против объекта класса.Предположим, у вас есть

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

, а затем выполните

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

Обратите внимание, что объект класса класса, унаследованного от NSObject, является NSObject, поэтому вы можете передать его этимметоды.Убедитесь сами, запустив эту программу:

#import <Foundation/Foundation.h>

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

Дело в том, что в Objective-C методы класса (которые называются статическими методами в C ++) - это просто стандартные методы, отправляемые объекту класса.Подробнее об объектах класса читайте в этих замечательных постах в блогах Хомяк и Какао с любовью .

...