iOS:outputStream未保持打开状态

iOS:outputStream未保持打开状态,ios,nsstream,nsinputstream,nsoutputstream,Ios,Nsstream,Nsinputstream,Nsoutputstream,好的,我正在实现一个输出和输入流。初始化时,流将打开并连接到我在PC上运行的TCPServer,但在初始化功能之外,一旦关闭,流可能会关闭,或者流没有正确存储。我不太确定,所以非常感谢您的帮助 在my.h文件中: @interface AVCamViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate, NSStreamDelegate> {

好的,我正在实现一个输出和输入流。初始化时,流将打开并连接到我在PC上运行的TCPServer,但在初始化功能之外,一旦关闭,流可能会关闭,或者流没有正确存储。我不太确定,所以非常感谢您的帮助

在my.h文件中:

@interface AVCamViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate, NSStreamDelegate> {
    NSOutputStream *outputStream;
    NSInputStream *inputStream;
}

@property (retain) NSInputStream *inputStream;
@property (retain) NSOutputStream *outputStream;
在initNetworkConnection中,模拟器连接到我的TCPServer并打开一个连接(streamstatus=2)。接收消息“Hello from Ipad Simulator”。
但是,我通过单击按钮调用了“sendaResponse”方法,然后streamstatus=0,“outputstream”似乎没有初始化。我只是没有正确地保留变量吗

我假设您正在使用ARC。 删除此代码:

{
NSOutputStream *outputStream;
NSInputStream *inputStream;
}

@synthesize inputStream, outputStream;
这只是混淆了属性和实例变量。这样做的结果是,您直接设置了实例变量,并且您的流实例被ARC释放

相反,一旦删除了上面的代码,请使用
self.inputStream
self.outputStream
访问流。这将允许属性正常工作,并确保您配置的“保留”规范得到遵守

您的原始代码也可能只是没有尝试设置属性。。。 您的配置应为:

    NSInputStream *inputStream = (NSInputStream *) readStream;
    NSOutputStream *outputStream = (NSOutputStream *) writeStream;

    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];

self.inputStream = inputStream;
self.outputStream = outputStream;
然后将属性更改为:

@property (strong) NSInputStream *inputStream;
@property (strong) NSOutputStream *outputStream;

我假设你用的是ARC。 删除此代码:

{
NSOutputStream *outputStream;
NSInputStream *inputStream;
}

@synthesize inputStream, outputStream;
这只是混淆了属性和实例变量。这样做的结果是,您直接设置了实例变量,并且您的流实例被ARC释放

相反,一旦删除了上面的代码,请使用
self.inputStream
self.outputStream
访问流。这将允许属性正常工作,并确保您配置的“保留”规范得到遵守

您的原始代码也可能只是没有尝试设置属性。。。 您的配置应为:

    NSInputStream *inputStream = (NSInputStream *) readStream;
    NSOutputStream *outputStream = (NSOutputStream *) writeStream;

    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];

self.inputStream = inputStream;
self.outputStream = outputStream;
然后将属性更改为:

@property (strong) NSInputStream *inputStream;
@property (strong) NSOutputStream *outputStream;

谢谢,非常感谢您的快速回复!谢谢,非常感谢您的快速回复!