2015-06-05 5 views
1

Я использую AFNetworking в качестве основного сетевого класса. Когда я делаю дамп памяти на джейлбрейк-телефоне, я могу легко увидеть URL-адреса запросов или ответы (например, объекты json) в файлах дампа в виде простого текста. Я проверил с инструментом утечки в xcode, и на этом нет утечки памяти. Мое приложение имеет конфиденциальные данные в URL-адресах или ответах (например, имя пользователя, адрес электронной почты ...), я хочу очистить эту информацию сразу после завершения соединения.Сетевые запросы и ответы остаются в памяти

Я попытался отключить NSURLCache в приложении:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 
                 diskCapacity:0 
                 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 

Я также попытался:

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

или

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:NSURLRequest]; 

Но ни одна из этих работ. Кто-нибудь знает, как это сделать?

+0

Если вы делаете дамп памяти, вы увидите остатки освобожденных объектов Foundation, потому что они не уничтожают память при освобождении, поэтому они остаются до тех пор, пока память не будет повторно использована. Нет никакого общего общего решения, кроме некоторых, как использовать типы Foundation. Apple не предоставляет безопасные версии 'NSString' и' NSData'. Создайте отчет об ошибке, запрашивающий защищенные объекты Foundation: http://bugreporter.apple.com – zaph

+0

Вы должны рассмотреть возможность использования 'AFHTTPSessionManager' и использовать' initWithSessionConfiguration' с эфемерным сеансом. См. Ссылку «ephemeralSessionfonuration» в документации 'NSURLSessionConfiguration'. – Rob

+1

Почему вас беспокоит, может ли пользователь видеть свою собственную информацию о взломанных устройствах? Они решили нарушить безопасность своего устройства. –

ответ

0

Вы попробовали?

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

Также необходимо отключить кеш из ответа заголовка сервера на стороне сервера. Если это в PHP:

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
?> 

Apple хорошо относится к ответным заголовкам.

+0

Благодарим вас за ответ. К сожалению, это не работает для меня. – Gincool

Смежные вопросы