Я наконец нашел ответ на этот вопрос.
Ошибка в приведенном выше коде (который, кстати, является почти точным образцом из SDK документации ) отсутствует в коде управления памятью. Авторелиз - это один из вариантов, ручной выпуск - другой. Независимо от того, как вы обрабатываете объект NSURLConnection, вы получаете утечки, используя NSURLConnection.
Прежде всего, вот решение. Просто скопируйте эти 3 строки кода непосредственно в connectionDidFinishLoading, didFailWithError и в любое другое место, где вы выпускаете объект NSURLConnection.
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
Кредит mpramodjain на http://forums.macrumors.com/showthread.php?t=573253 для кода.
Проблема, похоже, в следующем - SDK кэширует запросы и ответы на iPhone. Даже если ваш NSMutableURLRequest cachePolicy настроен так, чтобы не загружать ответ из кэша.
Глупо то, что кажется, что по умолчанию кэшируется много данных. Я передаю много данных (разбитых на несколько соединений) и начал получать предупреждения памяти, и, наконец, мое приложение умерло.
Документы, которые нам нужны, находятся в NSURLCache (не NSURLConnection), они утверждают:
NSURLCache реализует кэширование
ответы на запросы загрузки URL по
отображение объектов NSURLRequest на
NSCachedURLResponse объекты. Это
композит из памяти и
кэш на диске.
Методы предоставляются для управления
размеры каждого из этих кэшей, а также
как контролировать путь на диске для использования
для постоянного хранения данных кеша.
Эти три строки полностью уничтожают кеш. После добавления их в мое приложение ( Журнал GPS ) число моих живых объектов остается неизменным.