Jan 29, 2012 23:07
Objective-C посвящается.
Вводная: Есть класс NSData, представляющий оболочку для бинарных данных, и метод [NSData dataWithContentsOfURL:url], который, соответственно может сам данные сказать с указанного url'а. Не то, что бы сильно крутой метод, но нас устраивало - лаконично и без велосипедов.
Проблема: Показываем билд, бац - крэш, крэш, и еще много раз. Разобрались, что растет память, давай утечки искать. Утечек вроде нет, но поиски привели к этому самому методу, который в бэкграунд-треде выкачивал картинки. В общем, несмотря на то, что все сделано как надо, метод почему-то не сбрасывает данные после загрузки, будто в памяти сохраняет. Танцы с бубном, лазаем по developer.apple.com и SO. Бинго! От результата посмеялись и поматерились. Данный метод искользует NSURLConneсtion, и вот что нашлось про реализацию метода:
I had issues with this as well in my Large project. After working with an Apple engineer on trying to locate the leaks, he finally asked the main Apple dev team behind NSURLConnection. They basically said that there is an internal cache that is not clearable at all in NSURLConnection and it was a known issue.
Воистину, "это не баг, это фича". :) Be warned.