我有这段代码:
-(void)getData:(NSString *)data: (id) tv: (id) soc
{
NSLog(@"\nin get data with data\n");
NSLog(data);
几个小时后,应用程序崩溃,它到达数据获取数据并且不打印数据,因此它在数据打印时崩溃。调试引用类似字符串长度函数的失败。在XCode中,数据有一个警告,它不是字符串文字,可能不安全。现在我的经验告诉我,最可能的罪魁祸首是数据在某种程度上是空的。但它也在日志中打印出一些看似收到典型信息的东西。它说套接字有131个字节。当我测试并且它上次崩溃时它有189个字节。但它永远不会打印出来。
数据从socket liket发送到接收数据:
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中打印数据时才会崩溃,而如果它无法分配内存,那么它会更早崩溃吗?
麦克
答案 0 :(得分:2)
而不是
NSLog(data);
使用
NSLog(@"%@",data);
这可能无法解决您的根本原因,但您可以摆脱警告,并可能获得更多理性和有用的调试输出。
你也可以摆脱那次崩溃。 Hovever这不是一个承诺。