【发布时间】:2013-12-03 21:01:52
【问题描述】:
我是 ios 开发的新手,我正在使用 tcp 套接字做一个应用程序,并遵循了几个教程,与连接相关的一切都很好。但用户界面冻结,直到我的身份验证完成。为此使用“dispatch_queue”
-(BOOL)Connect {
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, ^ {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)IP,PORT, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream =(__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
[[NSRunLoop currentRunLoop] run];
});
return true;
}
在这里,连接工作正常并且没有锁定。现在我的问题是,当我在输出流上写一些东西时,什么都不发送。 通过按下按钮从另一个类我需要向服务器发送一些东西,该函数被调用但不发送任何内容,因为我认为它在另一个线程中。
-(void)Send:(NSMutableData *)_output{
[outputStream write:[_output bytes] maxLength:[_output length]];
}
如果它在另一个线程中,我如何在输出流中发送一些东西?
请原谅我的拼写错误,我不太会说英语
阅读一些论坛,我发现 NSThreads 可以在它们之间传递数据:
performSelector:onThread:withObject:waitUntilDone:
但我不知道如何创建一个已经在运行的线程实例。有人可以帮助我吗?
【问题讨论】:
标签: ios multithreading sockets grand-central-dispatch outputstream