我是Xcode和Objective-C的新手,所以我真的不知道我在做什么! ;-)
基本上我想要一个可以运行两个线程的IPhone应用程序,稍后将使用UDP Sockets
与其他应用程序进行通信。
当按下UI中的start-Thread/stop-Thread
按钮时,我已经设置了函数来响应,现在我想用代码填充它们以实际创建和启动线程。
NSThread
?我在哪里实现代码,新线程将执行?
我看不到运行方法或类似的东西。我想这与 selector
有关,我不明白。
答案 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和取消正在进行的操作的可能性(这可能对您有所帮助)。