我有一个触发线程的静态对象,但是每当线程尝试执行选择器时,我都会得到一个“[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];
一切顺利......
我做错了什么?
答案 0 :(得分:3)
你不需要为此创建一个线程,你应该只是调用
[self performSelectorInBackground:@selector(job) withObject:nil];
因为它是您的类,它实现job
而不是NSThread
类。当你打电话
[NSThread detachNewThreadSelector:@selector(job) toTarget:self withObject:nil];
您正在使用NSThread
致电job
上的self
,以便它可以运作。