Проблема памяти в 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 тыс. байтов при каждом вызове.

0 ответов

Другие вопросы по тегам