ios – purgeIdleCellConnections

前端之家收集整理的这篇文章主要介绍了ios – purgeIdleCellConnections前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于这个问题的“重复”状态:
这个问题在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连接被清除时显示.

猜你在找的iOS相关文章