NSThread参数问题

时间:2011-09-19 00:12:50

标签: ios multithreading nsthread arguments cllocation

[NSThread detachNewThreadSelector:@selector(addressLocation:) toTarget:self withObject:parameter];

[self addressLocation:parameter];

这两个陈述是否应该做同样的事情?因为其中一个(第二个)给了我一个准确的结果,另一个一直给我一个离非洲海岸的随机位置。从我所读到的,他们都应该做同样的事情;使用参数'parameter'执行addressLocation。唯一的区别是线程,但它正在访问一个全局volatile变量,所以这应该无关紧要,是吗?

1 个答案:

答案 0 :(得分:1)

线程要复杂得多。当您调用detachNewThreadSelector时,您正在创建一个新线程,但是没有简单的方法可以让您知道该调用何时完成。它可以在调用线程中的下一行代码之前或几秒钟后完成。

如果先创建线程,则可以使用performSelector:onThread:withObject:waitUntilDone,您应该得到与使用[self addressLocation:parameter]时相同的结果。虽然因为你的主线程在你等待结果时什么都不做,但这对你没什么好处。

有很多方法可以从线程中获取数据 - 例如,我喜欢从辅助线程调用performSelectorOnMainThread来将数据发送回主线程。

我会在Grand Central Dispatch上阅读,看看它是否符合您的需求。