【发布时间】:2014-11-17 22:44:10
【问题描述】:
我已经在 Stackoverflow 和互联网上检查了所有相关的问题和答案,但我没有得出任何结论。我正在开发一个 ipad 应用程序,它的作用是向我的网络服务器发出请求,将 pdf 文件作为 NSData 下载并在 UIWebView 中显示。问题是即使应用程序(关闭)从 pdfviewer 切换到 mainviewcontroller,内存也不会释放,因此一直在增加内存使用量。它从 14 mb 开始,然后每次我从主控制器转到 pdfviewer 时,它都会加起来。由于我使用的是 arc,我无法释放它。我也在清缓存。
主视图控制器.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];
}
当用户按下后退按钮时,我所做的只是模态地返回主视图控制器。所有 segues 都是模态的,仅供参考。
据我了解,当 pdfviewer 回到 mainviewcontroller 时,它没有调用 dealloc pdfviewer 不在窗口层次结构错误。
【问题讨论】:
-
_MainWebView 是如何定义的以及指向它的指针如何
-
我编辑了问题,它被定义为强 IBoutlet,现在它很弱。我还尝试以编程方式添加它,以便我可以解除分配并将其从内存中删除,但它不起作用。
-
在PdfViewController中实现一个带有NSLog的dealloc方法,看看是否被调用
-
它没有被调用。
-
我解决了,谢谢你的帮助。 @Daij-Djan 你的问题让我找到了答案
标签: ios objective-c iphone ipad uiwebview