如果我使用它来设置NSData,那么writeData方法会崩溃。
NSString *test = @"The quick brown fox jumped over the lazy dog\r\n";
NSData *data = [test dataUsingEncoding:NSUTF8StringEncoding];
[asyncSocket writeData:data withTimeout:10 tag:4];
但是,如果我使用这个,那么它可以工作......但我需要NSString,所以我可以输入一个格式化的字符串来发送......
char bytes[] = "The quick brown fox jumped over the lazy dog\r\n";
NSData* data = [[NSData alloc] initWithBytes:bytes length:sizeof(bytes)];
[asyncSocket writeData:data withTimeout:10 tag:4];
那我做错了什么?
答案 0 :(得分:1)
NSString和NSDate没有使用alloc和init设置,所以当它们到达写入数据时它们就消失了。我将NSDate更改为alloc和init,现在一切正常。这些想法来自几个回答这个问题的人。谢谢你的帮助!
答案 1 :(得分:0)
后者是空终止,前者不是。这可能是个问题。
答案 2 :(得分:0)
我知道它有点晚了但我认为知道为什么这样做会很好 - 当你用数据缓冲区调用writeData方法时,asyncsocket代码通过使用传递的数据对NSObject - AsyncWritePacket进行子类化来创建一个新对象。然后它使用retain并获取你传递的数据缓冲区的所有权,因此你不想释放它。
@implementation AsyncWritePacket
- (id)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i
{
if((self = [super init]))
{
buffer = [d retain];
timeout = t;
tag = i;
bytesDone = 0;
}
return self;
@end