2011-09-19 70 views
0
[NSThread detachNewThreadSelector:@selector(addressLocation:) toTarget:self withObject:parameter]; 

[self addressLocation:parameter]; 

这两个语句应该做同样的事情吗?因为他们中的一个(第二个)给了我一个准确的结果,另一个一直给我一个非洲海岸的随机位置。从我读过的,他们都应该做同样的事情;用参数'参数'执行addressLocation。唯一的区别是线程,但它正在访问一个全局易变的变量,所以这应该不重要,应该吗?NSThread参数问题

+0

刚刚解决了它 - 使用变量的后面的代码在位置被获取之前正在执行。这就是看似随机位置的原因。 –

回答

1

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

如果您先创建线程,然后可以使用performSelector:onThread:withObject:waitUntilDone,您应该得到与使用[self addressLocation:parameter]相同的结果。这不会对你有很大的帮助,因为当你等待结果时,你的主线程将无所作为。

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

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