我的应用程序有第二个正在运行的线程。我需要实现以下目标:
我发现了第一个任务的以下内容:在2个线程之间共享一个全局变量? 不知道如何实现第二项任务。 (NSNotificationCenter不允许传递对象...)
我正在按照这个[NSThread detachNewThreadSelector:@selector(backGroudTask) toTarget:self withObject:nil];
由于
答案 0 :(得分:1)
(NSNotificationCenter不允许传递对象......)
确实如此,但您必须将它们添加到通知的用户信息
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"object"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo];
- (void)foo:(NSNotification *)notification {
id object = [[notification userInfo] objectForKey:@"object"];
}
答案 1 :(得分:1)
我仍在寻找最佳答案,但这就是我所做的:
使用NSLock创建一个锁,阻止我访问两个线程上的相同变量。然后使用BOOL查看主线程是否要启动停止。
在主线程中执行此操作
[myLock lock];
exitFlag = YES;
[myLock unlock];
在另一个帖子中执行此操作
endMe = NO;
while(!endMe)
{
// do your task stuff
[myLock lock];
endMe = exitFlag;
[myLock unlock];
}
对于问题的第二部分,请使用以下内容:
[self performSelectorOnMainThread:@selector(your_selector_name) withObject:nil waitUntilDone:false];
这将导致您的选择器例程在主线程上运行。
希望这有帮助