在Objective-C中创建两个线程

时间:2012-11-13 16:51:00

标签: objective-c xcode multithreading network-programming

我是Xcode和Objective-C的新手,所以我真的不知道我在做什么! ;-)
基本上我想要一个可以运行两个线程的IPhone应用程序,稍后将使用UDP Sockets与其他应用程序进行通信。

当按下UI中的start-Thread/stop-Thread按钮时,我已经设置了函数来响应,现在我想用代码填充它们以实际创建和启动线程。

  • 这里的正确程序是什么?
  • 我是否需要继承NSThread
  • 我在哪里实现代码,新线程将执行?

    我看不到运行方法或类似的东西。我想这与 selector 有关,我不明白。

4 个答案:

答案 0 :(得分:14)

使用dispatch queues。它们本质上是轻量级线程,您无需担心线程或直接排队。

-(void) spawn
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        [self doWorkInBackground];
    });
}

您可以使用其中一个内置队列或自己的队列。

你应该阅读blocks,特别是内存管理方面。

答案 1 :(得分:1)

这是一个非常深入的讨论,但Apple的“Concurrency Programming Guide”应该让你开始。

答案 2 :(得分:1)

- (void)performBlockInBackground:(void (^)())block {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        block();
    });
}

然后你这样称呼它:

[self performBlockInBackground:^{
    NSLog(@"Log from background");
}];

答案 3 :(得分:1)

您也可以考虑使用NSOperation。它使用引擎排队,但提供更高级别的API和取消正在进行的操作的可能性(这可能对您有所帮助)。