首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSStream在关闭时挂起

NSStream在关闭时挂起
EN

Stack Overflow用户
提问于 2010-07-23 16:13:03
回答 3查看 1.4K关注 0票数 3

我在连接到服务器的iphone应用程序中有一个NSInputStream和一个NSOutputStream。我能够毫无问题地对套接字进行读写。问题是我有一个断开按钮,当我试图在任何一个流上调用close时,它会挂起应用程序。我猜我试图在错误的时间调用close,但我不确定什么是正确的时间。

EN

回答 3

Stack Overflow用户

发布于 2011-05-03 21:34:34

很可能在收到输入和输出流后,您没有保留它们:)我遇到了完全相同的问题,但它花费了我很多时间来寻找解决方案:)

票数 2
EN

Stack Overflow用户

发布于 2010-07-24 00:00:31

您必须确保告诉底层为您关闭本机套接字。下面是我的一个网络应用程序中的一些代码:

代码语言:javascript
复制
...
CFReadStreamRef readStreamRef;
CFWriteStreamRef writeStreamRef;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)host, port, &readStreamRef, &writeStreamRef);

if (readStreamRef && writeStreamRef)
{
    CFReadStreamSetProperty(readStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
    CFWriteStreamSetProperty(writeStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

    inputStream = (NSInputStream*)readStreamRef;
    outputStream = (NSOutputStream*)writeStreamRef;
    ...
票数 1
EN

Stack Overflow用户

发布于 2012-12-05 16:57:34

保留NSOutputStream解决了我的问题,希望对其他人有所帮助。示例代码是用ARC编写的,所以它们不需要再保留,但如果你不使用ARC,你就必须保留。

代码语言:javascript
复制
NSOutputStream *outputStream = (NSOutputStream *)CFBridgingRelease(writeStream);
**[outputStream retain];**
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop]
                                forMode:NSDefaultRunLoopMode];
[outputStream open];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3316427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档