我正在尝试理解和修改WiTap示例iPhone应用程序(工作正常)。在我对代码的修改中,我能够让两个设备相互定位并解析NSNetService对象,然后我在其上调用getInputStream:outputStream
来创建NSInputStream
和NSOutputStream
对象
问题在于,当我尝试使用NSOutputStream
从一个设备向另一个设备发送内容时,即使接收应用程序成功获取消息并显示UIAlert
,发送应用程序也会立即崩溃。
以下是我用来发送的代码:
NSString *str = [[NSString alloc] initWithString:@"teststring7"];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[str release];
[outStream write:[data bytes] maxLength:[data length]];
[data release];
我已经玩过释放或不释放或保留或不保留这些不同对象的所有可能组合,似乎没有任何工作 - 发送应用程序每次都崩溃。
我从原始示例中做出的一项更改是使我的应用委托的流属性如此:
@property (nonatomic, retain) NSInputStream *inStream;
@property (nonatomic, retain) NSOutputStream *outStream;
这可能是我的应用崩溃的原因吗?
我尝试在try / catch块中包装发送代码,但这并不能防止崩溃。
更新:这是回溯(对于字体丑闻感到抱歉 - 我认为这是来自每行前面的英镑符号):
线程4(线程13059):
选择$ DARWIN_EXTSN()中的线程3(线程12803):
mach_msg_trap()中的线程2(线程12291):
kevent()中的线程1(线程11523):
objc_msgSend()中的答案 0 :(得分:1)
删除[data release];
,您正在创建data
作为自动释放的对象,因此您不应该将其释放。
从stacktrace我想问题是字节数组已经消失 - 只要data
发送数据,你就不应该释放outStream
。释放data
时,其字节数组也将消失。
如果没有用,请在此处阅读我关于调试此类问题的答案:UITextView delegates problem