关于这个问题的“重复”状态:
这个问题在2012年11月被问到,它包含对问题的详细描述,并有3个答案.
被称为“原始”的问题是在2013年2月(这个“重复”之后3个月)提出的,没有详细的描述,只有2个答案.它的两个答案中最好的只是一个链接答案.
这个问题在2012年11月被问到,它包含对问题的详细描述,并有3个答案.
被称为“原始”的问题是在2013年2月(这个“重复”之后3个月)提出的,没有详细的描述,只有2个答案.它的两个答案中最好的只是一个链接答案.
为什么我的控制台收到这个消息?
purgeIdleCellConnections: found one to purge conn = (some object-ID)
当我的应用程序启动时,我发送消息到我的服务器.我用这一行代码做到这一点:
@implementation AppStatus { NSMutableData* activeDownload; NSURLConnection* Connection; } - (id) init { self = [super init]; if (self) { activeDownload = nil; Connection = nil; } return self; } - (void)sendStatus:(NSString*)url { NSString* escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURLConnection* conn =[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:escaped]] delegate:self]; Connection = conn; NSLog(@"%s Connection=%@",__PRETTY_FUNCTION__,Connection); }
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data { NSLog(@"%s connection=%@",connection); [activeDownload appendData:data]; } - (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error { NSLog(@"%s connection=%@",connection); activeDownload = nil; Connection = nil; //do nothing else; just ignore the error } - (void)connectionDidFinishLoading:(NSURLConnection*)connection { NSLog(@"%s Connection=%@",Connection); NSString* answer = [[NSString alloc] initWithData:activeDownload encoding:NSUTF8StringEncoding]; //do something usefull with the server's answer activeDownload = nil; Connection = nil; }
当我在一个真实的设备(而不是在模拟器上)运行这个应用程序时,我在控制台中收到这个消息:
2012-11-22 20:41:51.309 BookMan[376:907] -[AppStatus sendStatus:] Connection=<NSURLConnection: 0x1dd7ff40> 2012-11-22 20:41:51.929 BookMan[376:907] -[AppStatus connection:didReceiveData:] Connection=<NSURLConnection: 0x1dd7ff40> 2012-11-22 20:41:51.935 BookMan[376:907] -[AppStatus connectionDidFinishLoading:] Connection=<NSURLConnection: 0x1dd7ff40> purgeIdleCellConnections: found one to purge conn = 0x1dd8ff60
purgeIdleCellConnections消息在connectionDidFinishLoading-message之后约4或5秒钟左右.
您可以看到,purgeIdleCellConnections消息的对象编号与我在应用程序中创建和使用的连接数不同.
可能重要:仅当我在一个真实设备上运行应用程序(iPhone 4与iOS 6.0.1)时,我才会收到此消息.该设备使用3G连接,而不是WIFI连接.目前我没有WIFI网络来测试这是否发生在WIFI连接上.
当我在模拟器上运行应用程序时,我没有收到此消息.
当我将方法sendStatus更改为:
- (void)sendStatus:(NSString*)url { NSString* escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //NSURLConnection* conn =[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:escaped]] delegate:self]; //Connection = conn; NSLog(@"%s Connection=%@",Connection); }
我在控制台中得到这个输出:
2012-11-22 20:45:11.927 BookMan[391:907] -[AppStatus sendStatus:] Connection=(null)
当我不创建连接时,我没有获得purgeIdleCellConnections消息.
那么这个消息是什么意思,为什么要得到它?
purgeIdleCellConnections: found one to purge conn = (some object-ID)
解决方法
这意味着,一个空闲时间太长的连接已经关闭了TCP连接.这是一个基本的机制,它的日志不应该打扰你,因为苹果在
Technical QA1774上声明,这是一个被错误地启用的调试信息.
这个日志确实仅在WWAN连接被清除时显示.