NSThread проблема с аргументом - PullRequest
0 голосов
/ 19 сентября 2011
[NSThread detachNewThreadSelector:@selector(addressLocation:) toTarget:self withObject:parameter];

[self addressLocation:parameter];

Должны ли эти два утверждения делать одно и то же? Потому что один из них (второй) дает мне точный результат, а другой постоянно дает мне случайное местоположение у побережья Африки. Из того, что я прочитал, они оба должны делать то же самое; выполнить addressLocation с аргументом «параметр». Единственное отличие - это поток, но он обращается к глобальной изменчивой переменной, так что это не должно иметь значения, не так ли?

1 Ответ

1 голос
/ 19 сентября 2011

Потоки намного сложнее, чем это.Когда вы вызываете detachNewThreadSelector, вы создаете новый поток, но у вас нет простого способа узнать, когда этот вызов завершится.Он может завершиться до следующей строки кода в вызывающем потоке или спустя много секунд.

Если вы сначала создадите поток, вы можете использовать executeSelector: onThread: withObject: waitUntilDone, и вы должны получить тот же результат, что и при использовании [self addressLocation: параметр].Это не принесет вам большой пользы, потому что ваш основной поток ничего не будет делать, пока вы ждете результата.

Есть много способов получить данные из потока - мне нравится звонитьexecuteSelectorOnMainThread из вторичного потока, например, для отправки данных обратно в основной поток.

Я бы прочитал Grand Central Dispatch , чтобы узнать, соответствует ли он вашим потребностям.

...