Проблема памяти в NSConnection sendSynchronousRequest
Я пытаюсь использовать LolayHttpClient в одном из моих проектов iOS. это работает хорошо, за исключением одной проблемы - память продолжает расти, даже когда я запускаю код в autoreleasepool.
Связанный код довольно прост. LolayHttpClient использует NSConnection sendSynchronousRequest. Поэтому я сомневаюсь, что проблема с памятью возникает при выполнении sendSynchronousRequest. Следующее - моя функция тестирования. кто-нибудь поможет?
int main(int argc, char * argv[]) {
int max = 100000;
while (max > 0) {
@autoreleasepool {
[NSURLCache setSharedURLCache:[[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil]];
GetMethod *get = [[GetMethod alloc] init];
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:@"192.168.0.107:10000" path:@"/services"];
HttpResponse *resp = [get executeSynchronouslyAtURL:url];
max = max -1;
NSLog(@"%@", [resp responseString]);
NSLog(@"%@", [NSString stringWithFormat:@"%d",max]);
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[NSThread sleepForTimeInterval:1];
}
}
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
executeSynchronouslyAtURL: url в конечном итоге вызывает executeMethodSynchronously следующим образом в том же потоке.
- (HttpResponse*)executeMethodSynchronously:(NSURL*)methodURL methodType:(NSString*)methodType dataInBody:(bool)dataInBody contentType:(NSString*)contentType error:(NSError**) error {
//Create a new URL request object
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
if(cachePolicy != NSURLRequestUseProtocolCachePolicy) {
[request setCachePolicy:cachePolicy];
}
[request setHTTPShouldHandleCookies: handleCookies];
[self prepareMethod:methodURL methodType:methodType dataInBody:dataInBody contentType:contentType withRequest:request];
NSString* requestBody = [self bodyString];
DLog(@"Request url=%@, headers=%@, parameters=%@, body=%@", [request URL], [self headers], [self parameters], requestBody.length < 4096 ? requestBody : [NSString stringWithFormat:@"(length=%lu)", (unsigned long) requestBody.length]);
//Execute the HTTP method, saving the return data
NSHTTPURLResponse * response;
NSError* errorResponse = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&errorResponse];
HttpResponse * responseObject = [[HttpResponse alloc] initWithHttpURLResponse:response withData:returnData];
if (errorResponse) {
DLog(@"Error url=%@, error=%@", [request URL], errorResponse);
if (error != NULL) {
*error = errorResponse;
}
}
DLog(@"Response url=%@, status=%li, headers=%@, body=%@", [request URL], (long) [responseObject statusCode], [responseObject headerFields], [responseObject responseString]);
return responseObject;
}
Инструмент инструмента XCode указывает на функцию:
HTTPNetStreamInfo:: _ readStreamClientCallBack (__ CFReadStream *, без знака long)
который вызывается периодически и выделяет 132 тыс. байтов при каждом вызове.