如何正确使用流对象

时间:2012-12-16 11:17:23

标签: iphone objective-c ios

我正在尝试使用流对象(输入/输出)与服务器通信。 但是我不确定我是否做得很好,或者我是否必须适应我已经做过的事情。

在每个需要与我的服务器通信的视图中,我正在使用此方法打开连接:

- (void)initNetworkCommunication {
  CFReadStreamRef readStream;
  CFWriteStreamRef writeStream;
  CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)kServerIp, kServerPort, &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];
}

我不知道这是不是正确的做法(我很确定不是)。我也使用JSON与我的服务器进行通信(如果没有让我知道的话,我不知道是否有最好的方法)

所以我想知道你们是否可以教我使用流对象的正确方法:) 我发现这篇文章Manage sockets in iOS with uitabbarcontroller,但我真的不明白我要做什么。

P.S。我正在使用流来对我的数据库进行查询,即:app - > giveMeMyNews - >服务器 - > yourNews - > app - >显示。很简单,但是因为我对iPhone的发展很新,所以我不知道我是否做得对:(

1 个答案:

答案 0 :(得分:1)

Streams正在运行,您可以拥有输入流或输出流。当流能够接受您的发送字节或者有可用的新字节时,流会发送委托方法。

看看我的Bonjour写作我是如何实现stream:handleEvent:方法的,应该清理一下:http://www.cocoanetics.com/2012/11/bonjour/

最后,如果您希望通过WiFi在iOS和/或Mac设备之间进行通信,我编写了DTBonjour,这极大地简化了对象的发送。您连接并发送NSObject,它们会自动编码为plist或json,并且收件人将其作为解码对象获取。 http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/

至少我相信我的代码足够清晰,可以帮助您理解这个过程。