NSThread不执行选择器

时间:2015-01-19 17:48:13

标签: ios nsthread

我有一个触发线程的静态对象,但是每当线程尝试执行选择器时,我都会得到一个“[NSThread initWithTarget:selector:object:]:target没有实现选择器”而应用程序崩溃

继承我的代码:

@implementation currentUser
{
    NSThread *engineThread;
}

-(void)MessageEngineStart{
    NSLog(@"[MDS]:Message Engine Started!");    
    if(engineThread == nil){
        engineThread = [[NSThread alloc]init];
    }

    if(!engineThread.isExecuting){
        [engineThread performSelectorInBackground:@selector(job) withObject:nil];//here is where it crashes
        NSLog(@"[MDS]: Thread Will perform job in background.");
    }
    else{
        NSLog(@"[MDS]: Thread is being executed.");
    }
    [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(MessageEngineStart) userInfo:nil repeats:NO];
}
-(void)job
{
   //JOB
}

线程和作业都在同一个对象上。 如果我只是使用

[NSThread detachNewThreadSelector:@selector(job) toTarget:self withObject:nil];

一切顺利......

我做错了什么?

1 个答案:

答案 0 :(得分:3)

你不需要为此创建一个线程,你应该只是调用

[self performSelectorInBackground:@selector(job) withObject:nil];

因为它是您的类,它实现job而不是NSThread类。当你打电话

[NSThread detachNewThreadSelector:@selector(job) toTarget:self withObject:nil];

您正在使用NSThread致电job上的self,以便它可以运作。