Утечка NSURLConnection?

Предположите употребление в пищу леденца из миски. Вы регулярно берете одну часть. Чтобы препятствовать тому, чтобы миска закончилась, кто-то мог бы снова наполнить миску, прежде чем это станет пустым, так, чтобы, когда Вы хотите взять другую часть, был леденец в миске.

миска действует как буфер между Вами и мешком леденца.

при просмотре кино онлайн веб-сервис будет постоянно загружать следующие 5 минут или так в буфер, тот способ, которым компьютер не должен загружать фильм, поскольку Вы наблюдаете его (который вызвал бы зависание).

9
задан Arun_ 31 December 2013 в 12:00
поделиться

2 ответа

Это распространенный вопрос, который решается с помощью [автозапуска объекта]. В вашем коде это будет выглядеть следующим образом:

NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease];

Таким образом, объект автоматически добавляется в «пул автозапуска» и освобождается в начале следующего цикла выполнения после того, как на него больше не ссылаются.

Надежда это помогает

Edit: Кроме того, я не понимаю, почему вам нужно вызывать -retain для вашей переменной ReceiveData.

2
ответ дан 4 December 2019 в 08:33
поделиться

Я наконец нашел ответ на этот вопрос.

Ошибка в приведенном выше коде (который, кстати, является почти точным образцом из документов 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 ) количество моих #living объектов остается стабильным.

17
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: