この質問の「重複」状態について:
この質問は 2012 年 11 月に出されたもので、問題の詳細な説明が含まれており、3 つの回答があります。
「オリジナル」と呼ばれる質問は、2013 年 2 月 (この「重複」の 3 か月後) に出されたもので、詳細な説明はなく、回答は 2 つしかありません。その 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=%@",__PRETTY_FUNCTION__,connection);
[activeDownload appendData:data];
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
NSLog(@"%s connection=%@",__PRETTY_FUNCTION__,connection);
activeDownload = nil;
Connection = nil;
//do nothing else; just ignore the error
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection {
NSLog(@"%s Connection=%@",__PRETTY_FUNCTION__,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 メッセージの約 4 ~ 5 秒後に表示されます。
ご覧のとおり、purgeIdleCellConnections メッセージのオブジェクト番号は、アプリで作成して使用した接続の番号と同じではありません。
おそらく重要: このメッセージは、実際のデバイス (iOS 6.0.1 を搭載した iPhone 4) でアプリを実行した場合にのみ表示されます。このデバイスは、WIFI 接続ではなく、3G 接続を使用します。現時点では、これが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=%@",__PRETTY_FUNCTION__,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)