2012-11-22 159 views
11

關於此問題的「重複」狀態:
此問題在2012年11月問過,它包含問題的詳細描述並有3個答案。
在2013年2月(這個「重複」之後3個月)被問及被稱爲「原始」的問題,沒有詳細的描述,只有2個答案。兩個答案中的最好答案只是一個鏈接答案。purgeIdleCellConnections


爲什麼我在我的控制檯得到這個消息?:

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 

的connectionDidFinishLoading消息後purgeIdleCellConnections消息apears約4秒或5秒。

如您所見,purgeIdleCellConnections消息的對象編號與我在應用中創建和使用的連接編號不同。

也許重要提示:只有當我在真實設備(帶有iOS 6.0.1的iPhone 4)上運行應用程序時,纔會收到此消息。此設備使用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=%@",__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) 

回答

0

當連接到蜂窩網絡設備上,我觀察出來的IOS這個調試消息6.0 SDK。時序方面,我發現它與我的應用程序中終止的「活動」AJAX調用相關。然而,要證明什麼是非常困難的,因爲只有在UIWebView中呈現網頁時纔會出現這種情況。我只是說我不認爲這些信息是良性的。我認爲他們可能會指出蘋果框架中的一個錯誤,它在終止連接方面過於積極。很難獲得在UIWebView內部運行的使用AJAX調用的JavaScript的檢測,因此目前這一切都非常具有推測性。

+0

我不使用UIWebView,並且在我的應用程序中不使用Ajax。上面描述了我所用的全部內容。 –

7

是的,這是操作系統關閉蜂窩數據的活動連接,例如3G。你不應該使用Wifi連接看到這個。似乎操作系統清除連接會增加一些時間來向服務器發送數據請求。

+0

如何解決它Alex – ashokdy

10

這意味着,一個空閒時間過長的連接已關閉其TCP連接。這是一個基本的機制,它的日誌不應該打擾你,因爲蘋果在Technical QA1774上聲明,這是一個錯誤地被啓用的調試消息。

此日誌的確僅在清除WWAN連接時才顯示。

+0

如何解決這個問題,我需要我的應用程序也在3G工作。我該如何解決這個問題 – ashokdy

+0

@ashokdy你是否曾經能夠解決這個問題?我在同一條船上,你需要我的應用程序工作在3G – holierthanthou84

+0

@ holierthanthou84沒有我沒有找到任何解決方案呢。如果您發現請讓我知道。 – ashokdy