Я использую AFNetworking для отправки запросов, но когда запрос завершает работу, я получаю это выделение памяти в инструментах, и они остаются там навсегда ... Если я попытаюсь запустить другой запрос, приложение получит память предупреждение несколько раз и, следовательно, он вынужден закрыть.Выделение с использованием запроса AFNetworking
Graph Category Live Bytes # Living # Transitory Overall Bytes # Overall # Allocations (Net/Overall)
1 CFString (store) 4,86 MB 29 3595 30,78 MB 3624 <XRRatioObject: 0x7ffd1c5dc3f0> %0.00, %0.17
1 Malloc 3,91 MB 3,91 MB 1 1 7,83 MB 2 <XRRatioObject: 0x7ffd1c5dc3f0> %0.00, %0.00
И внутренние распределения для каждого из:
Первый
# Address Category Timestamp Live Size Responsible Library Responsible Caller
0 0x4d28000 CFString (store) 01:12.165.450 • 4923392 CFNetwork _ZL19_cacheKeyForRequestPK13_CFURLRequest
1 0x36b8000 CFString (store) 00:54.705.461 • 172032 CFNetwork _ZL19_cacheKeyForRequestPK13_CFURLRequest
2 0x1e3f5a00 CFString (store) 01:12.326.108 • 1024 CFNetwork _ZL19_cacheKeyForRequestPK13_CFURLRequest
Второй
# Address Category Timestamp Live Size Responsible Library Responsible Caller
0 0x6903000 Malloc 3,91 MB 01:01.583.198 • 4104192 Foundation -[NSConcreteMutableData initWithLength:]
Edit 1
Вот код, который мы используем для создания запросов:
// Do a json request
+ (void) doJsonRequestWithPath
: (NSString *) path
withMethod: (NSString *) method
withParameters: (id) parameters
withHeaders: (NSDictionary *) headers
onSuccess: (void(^)(NSURLRequest *, NSHTTPURLResponse *, id))success
onFailure: (void(^)(NSURLRequest *, NSHTTPURLResponse *, NSError *, id))failure
{
// Register json request operation
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
// Json parameter encoding
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSMutableURLRequest *request;
if ([parameters isKindOfClass:[NSDictionary class]]) {
// Create a request with the http client + path and params
request = [httpClient requestWithMethod:method path:path parameters:parameters];
}
else {
request = [httpClient requestWithMethod:method path:path parameters:nil];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//[request setValue:@"100-continue" forHTTPHeaderField:@"Expect"];
[request setHTTPBody:[parameters dataUsingEncoding:NSUTF8StringEncoding]];
}
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:20];
// Add headers to the request if there is any
if (headers != nil)
[self addHeadersToRequest:request fromDictionary:headers];
// Create a json request operation
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:success failure:failure];
// Starts the operation
[operation start];
}
Edit 2
У нас есть рекурсивный вызов
- (void)sendFingerprintAtIndex:(NSInteger) index withGuid:(NSString *) guid
{
SendActivationRequest *sendActivationRequest = [[SendActivationRequest alloc]
initWithGuid: guid
andWithTotalImages:4
andWithImageIndex:index
andImageType:2 //digital
andWithImage:image];
[self.activationDao sendActivationRequest:sendActivationRequest withCompletionBlock:^(NSString *hash, NSArray *errors) {
if (hash) {
.
.
.
}
else {
// recursive call
[self sendFingerprintAtIndex:newIndex withGuid:guid];
}
}
else
{
self.completionBlockController(NO, [errors objectAtIndex:0]);
}
}];
}
И в Дао
- (void) sendActivationRequest:(SendActivationRequest *) sendActivationRequest withCompletionBlock:(void (^)(NSString *, NSArray *))completionBlock
{
// Path
NSString *path = @"EnviarAtivacao";
id params = [sendActivationRequest getParams];
NSDictionary *headers = [sendActivationRequest getHeader];
// Do a json post request
[self doJsonPostRequestWithPath:path
withParameters:params
withHeaders:headers
onSuccess:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
.
.
.
} onFailure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *err, id json) {
.
.
.
}];
}
Спасибо!
Можете ли вы привести пример кода, показывающий, как вы используете AFNetworking? – Jeff
Я предполагаю, что у вас есть цикл сохранения в вашем успехе или сбое. Основываясь на распределении объектов XRRatioObject, я предполагаю, что он имеет какое-то отношение к структуре Sparrow. Можете ли вы опубликовать, как вы называете этот метод? –
Возможно, рекурсивный вызов - проблема Аарона. Как вы думаете? –