我有这个代码:
-(void)getData:(NSString *)data: (id) tv: (id) soc
{
NSLog(@"\nin get data with data\n");
NSLog(data);
几个小时后,应用程序崩溃,它使用数据获取数据并且不打印数据,因此它在打印数据时崩溃。调试以字符串长度函数之类的方式引用失败。在 XCode 中,数据有一个警告,表明它不是字符串文字并且可能不安全。现在我的经验告诉我,最可能的罪魁祸首是数据不知何故为空。但它还在日志中打印了一些看起来像是收到典型消息的东西。它说它有来自套接字的 131 个字节。当我测试并且它上次崩溃时它有 189 个字节。但它从不打印它。
数据从套接字发送进来,就像接收数据一样:
UInt8 buffer[len];
NSLog(@"Received %d bytes from socket %d\n",
len, CFSocketGetNative(s));
CFDataGetBytes(df, range, buffer);
NSString *oldtext = [mTextViewAlias text];
char buffer2[len];
for(int a=0; a<len; a++)
buffer2[a]=buffer[a];
NSMutableData *buffer3 = [[NSMutableData alloc] init];
[buffer3 appendBytes:buffer2 length:len];
NSString *newdata = [[NSString alloc] initWithData: buffer3 encoding:NSASCIIStringEncoding];
并且对打印数据时崩溃的类方法的调用只是:
[mytelnet getData:newdata:mTextViewAlias:(__bridge id)(s)];
我会不会有内存泄漏或其他什么,几个小时后我的内存不足导致新数据的分配为空,即使我从大约 100 个字节开始?只有当我尝试在 nslog 中打印数据时它才会崩溃,如果它未能分配内存,它不会更早崩溃?
麦克风