Из основного потока я вызываю селектор, используя
[self performSelectorInBackground:@selector(startTask) withObject:nil];
Это метод startTask:
-(void)startTask{
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [[NSPipe alloc] init];
NSFileHandle *fh = [pipe fileHandleForReading];
NSArray *args = [NSArray arrayWithObjects:@"-z",iPAddress, [NSString stringWithFormat:@"%@",portNumber], nil];
[task setLaunchPath:@"/usr/bin/nc"];
[task setArguments:args];
[task setStandardOutput:pipe];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
[nc addObserver:self
selector:@selector(dataReady:)
name:NSFileHandleReadCompletionNotification
object:fh];
[task launch];
[fh readInBackgroundAndNotify];
}
Это должно предотвратить блокировку NSTask основного потока (и пользовательского интерфейса),Но это не так.Если я удаляю
[task launch];
Основной поток не блокируется.Что я делаю неправильно?o_O
(Кстати, dataReady просто обрабатывает данные. Блокирует не этот метод ...)
РЕДАКТИРОВАТЬ: Я только что узнал, что я не звонюселектор из основного потока.Я называю это из отдельной ветки!К сожалению, я должен назвать это из этой темы.