iphone sdk在线程之间进行通信

时间:2011-01-23 18:07:40

标签: objective-c ios4

我的应用程序有第二个正在运行的线程。我需要实现以下目标:

  • 从主应用程序线程
  • 正常停止单独的线程
  • 从第二个线程调用主线程上的函数以发信号通知已找到结果并将其传递给主线程。

我发现了第一个任务的以下内容:在2个线程之间共享一个全局变量? 不知道如何实现第二项任务。 (NSNotificationCenter不允许传递对象...)

我正在按照这个[NSThread detachNewThreadSelector:@selector(backGroudTask) toTarget:self withObject:nil];

来吃第二个帖子

由于

2 个答案:

答案 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];

这将导致您的选择器例程在主线程上运行。

希望这有帮助