ios – purgeIdleCellConnections

前端之家收集整理的这篇文章主要介绍了ios – purgeIdleCellConnections前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于这个问题的“重复”状态:
这个问题在2012年11月被问到,它包含对问题的详细描述,并有3个答案.
被称为“原始”的问题是在2013年2月(这个“重复”之后3个月)提出的,没有详细的描述,只有2个答案.它的两个答案中最好的只是一个链接答案.

为什么我的控制台收到这个消息?

  1. purgeIdleCellConnections: found one to purge conn = (some object-ID)

当我的应用程序启动时,我发送消息到我的服务器.我用这一行代码做到这一点:

  1. @implementation AppStatus {
  2. NSMutableData* activeDownload;
  3. NSURLConnection* Connection;
  4. }
  5.  
  6. - (id) init {
  7. self = [super init];
  8. if (self) {
  9. activeDownload = nil;
  10. Connection = nil;
  11. }
  12. return self;
  13. }
  14.  
  15. - (void)sendStatus:(NSString*)url {
  16. NSString* escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  17. NSURLConnection* conn =[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:escaped]] delegate:self];
  18. Connection = conn;
  19. NSLog(@"%s Connection=%@",__PRETTY_FUNCTION__,Connection);
  20. }

在同一个文件中我有这个委托方法

  1. - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {
  2. NSLog(@"%s connection=%@",connection);
  3. [activeDownload appendData:data];
  4. }
  5.  
  6. - (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
  7. NSLog(@"%s connection=%@",connection);
  8. activeDownload = nil;
  9. Connection = nil;
  10. //do nothing else; just ignore the error
  11. }
  12.  
  13. - (void)connectionDidFinishLoading:(NSURLConnection*)connection {
  14. NSLog(@"%s Connection=%@",Connection);
  15. NSString* answer = [[NSString alloc] initWithData:activeDownload encoding:NSUTF8StringEncoding];
  16. //do something usefull with the server's answer
  17. activeDownload = nil;
  18. Connection = nil;
  19. }

当我在一个真实的设备(而不是在模拟器上)运行这个应用程序时,我在控制台中收到这个消息:

  1. 2012-11-22 20:41:51.309 BookMan[376:907] -[AppStatus sendStatus:] Connection=<NSURLConnection: 0x1dd7ff40>
  2. 2012-11-22 20:41:51.929 BookMan[376:907] -[AppStatus connection:didReceiveData:] Connection=<NSURLConnection: 0x1dd7ff40>
  3. 2012-11-22 20:41:51.935 BookMan[376:907] -[AppStatus connectionDidFinishLoading:] Connection=<NSURLConnection: 0x1dd7ff40>
  4. purgeIdleCellConnections: found one to purge conn = 0x1dd8ff60

purgeIdleCellConnections消息在connectionDidFinishLoading-message之后约4或5秒钟左右.

您可以看到,purgeIdleCellConnections消息的对象编号与我在应用程序中创建和使用的连接数不同.

可能重要:仅当我在一个真实设备上运行应用程序(iPhone 4与iOS 6.0.1)时,我才会收到此消息.该设备使用3G连接,而不是WIFI连接.目前我没有WIFI网络来测试这是否发生在WIFI连接上.
当我在模拟器上运行应用程序时,我没有收到此消息.

当我将方法sendStatus更改为:

  1. - (void)sendStatus:(NSString*)url {
  2. NSString* escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  3. //NSURLConnection* conn =[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:escaped]] delegate:self];
  4. //Connection = conn;
  5. NSLog(@"%s Connection=%@",Connection);
  6. }

我在控制台中得到这个输出

  1. 2012-11-22 20:45:11.927 BookMan[391:907] -[AppStatus sendStatus:] Connection=(null)

当我不创建连接时,我没有获得purgeIdleCellConnections消息.

那么这个消息是什么意思,为什么要得到它?

  1. purgeIdleCellConnections: found one to purge conn = (some object-ID)

解决方法

这意味着,一个空闲时间太长的连接已经关闭了TCP连接.这是一个基本的机制,它的日志不应该打扰你,因为苹果在 Technical QA1774上声明,这是一个被错误地启用的调试信息.

这个日志确实仅在WWAN连接被清除时显示.

猜你在找的iOS相关文章