Я создал класс для загрузки изображений из Интернета. Проблема заключается в утечке памяти. Так как это было вызвано несколько раз. Все загружаемые изображения вызываются с помощью этого метода. Поскольку источник изображений неограничен, утечка увеличивается.
Трассировка стека не показывает утечки кода, кроме main .
Утечка объекта: Маллок 144, 176, 128, 160 байт.
Resposable Library: CFNetwork
Ответственный кадр: createCanonicalURL
Трассировка стека:
0 CFNetwork createCanonicalURL
1 CFNetwork HTTPProtocol::_createMutableCanonicalRequest(__CFAllocator const*, _CFURLRequest const*, void const*)
2 CFNetwork HTTPProtocol::_createCanonicalRequest(__CFAllocator const*, _CFURLRequest const*, void const*)
3 CFNetwork HTTPProtocol::copyCanonicalRequest()
4 CFNetwork URLConnectionLoader::copyProtocolCanonicalRequest()
5 CFNetwork URLConnectionClient::getRequestForTransmission(unsigned char, _CFURLResponse*, _CFURLRequest const*, __CFError**)
6 CFNetwork URLConnectionClient::_clientWillSendRequest(_CFURLRequest const*, _CFURLResponse*, URLConnectionClient::ClientConnectionEventQueue*)
7 CFNetwork URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long)
8 CFNetwork URLConnectionClient::processEvents()
9 CFNetwork MultiplexerSource::perform()
10 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
11 CoreFoundation __CFRunLoopDoSources0
12 CoreFoundation __CFRunLoopRun
13 CoreFoundation CFRunLoopRunSpecific
14 CoreFoundation CFRunLoopRunInMode
15 GraphicsServices GSEventRunModal
16 GraphicsServices GSEventRun
17 UIKit UIApplicationMain
18 Interior News main /iPhone Ongoing Projces/WAN_Interiors/Latest_Interior_News_V_1_2/Latest_Interior_News/main.m:14
19 Interior News start
объект соединения правильно освобожден.
Это также входит в устройство тоже. Большинство из них говорят, что это ошибка в NSURLConnection, некоторые говорят, что есть работа вокруг, а некоторые говорят, что нет
Я попытался установить как большинство упомянутых
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
но бесполезно ...
Пожалуйста, совет
Код
if (connectionForImage==nil)
{
NSString * fullImagePath = [rootURLForImage stringByAppendingPathComponent:imagePath];
NSString * trimedstring = [fullImagePath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString * percentEscapedUrl = [trimedstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Trimmed :%@",trimedstring);
NSLog(@"PercentEscaped %@",percentEscapedUrl);
NSURLRequest * imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:percentEscapedUrl] cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:6.0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
connectionForImage =[[NSURLConnection alloc] initWithRequest:imageRequest delegate:self];
}
Соединение для образа освобождается при завершении загрузки и ошибке.