关于这个问题的“重复”状态:
这个问题在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连接被清除时显示.