Можно ли запустить поток, нажав кнопку в интерфейсе какао, и продолжать использовать интерфейс во время работы потока? - PullRequest
1 голос
/ 04 августа 2009

У меня есть интерфейс Какао. Когда я нажимаю кнопку, я хочу обработать некоторые данные, но я хочу продолжать использовать интерфейс, пока он работает. Я думаю, что единственное решение - это NSThread. Теперь будет ли механизм блокировки, препятствующий мне вернуться из метода IBAction, если он порождает поток?

Ответы [ 3 ]

3 голосов
/ 04 августа 2009

Взгляните на NSOperation. NSOperation - один из немногих классов какао, который должен быть разделен на подклассы, чтобы быть полезным. Добавив свойство delegate в свой подкласс NSOperation, вы можете получать уведомления о завершении операции. Также вы можете добавить свойство userInfo, чтобы позволить операции передавать произвольные данные делегату

@implementation MyNSOperationSubclass

-(void)main
{
    //do operation here



    //operationResult is used to report back to the delegate. operationResult could include a userInfo key so that the delegate can have some data passed back, or an error key to indicate success of the operation.
    NSDictionary *operationResult; 


    //Some checks to ensure that the delegate implements operationHasFinished: should be added.
    //waitUntilDone: YES locks the main thread
    [[self delegate] performSelectorOnMainThread:@selector(operationHasFinished:)     withObject:operationResult waitUntilDone: YES];

}

@end
3 голосов
/ 04 августа 2009

Нет, механизм блокировки отсутствует. Новый поток начнется, а текущий поток продолжится. Вы можете посмотреть на performSelectorInBackground:withObject: и, возможно, NSOperation в дополнение к NSThread.

0 голосов
/ 04 августа 2009

Не очень много знаю о какао, но запуск нового потока для обработки чего-либо в фоновом режиме, при этом оставляя поток пользовательского интерфейса свободным для ввода пользовательских данных (и, таким образом, предотвращая зависание пользовательского интерфейса), является наиболее широко используемым методом для решения вашей проблемы. Упомянутые потоки будут работать вместе (одновременно), и программист должен позаботиться о проблемах синхронизации, если таковые имеются. Вы должны продолжить работу с техникой без сомнения.

Спасибо, Sourabh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...