Я проверил все связанные вопросы и ответы как на Stackoverflow, так и в Интернете, но я не пришел к выводу. Я разрабатываю приложение ipad, и то, что он делает, это запрос на мой веб-сервер для загрузки PDF-файла в виде NSData и показ его в UIWebView. Проблема в том, что приложение (закрывает) segues от pdfviewer до mainviewcontroller, память не выпускается, что увеличивает время использования памяти. Он начинается с 14 МБ, а затем каждый раз, когда я перехожу к pdfviewer от основного контроллера, он складывается. Поскольку я использую arc, я не могу его освободить. Я также очищаю кеш.UIWebView не освобождает память
MainView controller.m
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showpdf"]){
PdfViewer *pdfviewer=(PdfViewer*)[segue destinationViewController];
pdfviewer.ReportID=TheReportID;
pdfviewer.TabID=_TabID;
}
}
PdfViewer.h
@property (strong, nonatomic) IBOutlet UIWebView *MainWebView;
PdfViewer.m
-(void)viewDidLoad
{
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_MainWebView loadRequest:request];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"ShowMain5"]){
MainViewController *mv=(MainViewController*)[segue destinationViewController];
mv.TabID=_TabID;
}
}
-(void)dealloc{
NSLog(@"test");
}
я также пытался добавить UIWebView программно вместо IBOutlet, но все еще не мог» Решить проблему.
Программным (альтернативный)
@implementation PdfViewer
UIWebView *webview;
- (void)viewDidLoad
{
webview=[[UIWebView alloc]initWithFrame:CGRectMake(35, 35, 768,959)];
[webview loadRequest:request];
[self.view addSubview:webview];
}
При нажатии пользователем кнопки назад все, что я сделать, это вернуться к mainviewcontroller modally.All перетекает являются модальными FYI.
Как я понял, что pdfviewer не вызывает dealloc, когда он переходит к mainviewcontroller, я проверил, имел ли кто-нибудь подобную проблему с viewcontrollers раньше, и я нашел этот вопрос. UIViewController -dealloc method not called теперь я думаю, что память остается на том же уровне, но теперь она дает pdfviewer не находится в ошибке иерархии окна.
как _MainWebView определен и как у него есть указатели –
Я редактировал вопрос, он был определен как сильный IBoutlet, теперь он слаб.Я также попытался добавить его программно, чтобы я мог dealloc и удалить его из памяти, но он не работал. – Codette
реализовать метод dealloc с NSLog в PdfViewController и посмотреть, называется ли он –