UIWebviewにてPDFを立て続けに読み込ませるとアプリが落ちる現象。(Air2のみ)

//ソース
//
// ViewController.m
// PDFViewer
//
//
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *Label;
@end
UIWebView *web;
NSTimer *tim;
int Rmw = 0;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
web = [[UIWebView alloc] initWithFrame:self.view.frame];
[self.view addSubview:web];
NSURL *URL = [NSURL URLWithString:@"http://mazur.me/SwiftInFlux/docs/6.3-beta1.pdf"];
NSURLRequest *URLreq = [NSURLRequest requestWithURL:URL];
[web loadRequest:URLreq];
[self.view sendSubviewToBack:web];
web.dataDetectorTypes = UIDataDetectorTypeNone;
tim = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(reloadpdf) userInfo:nil repeats:YES];
}
- (IBAction)stop:(UIButton*)sender {
if([tim isValid]){
[tim invalidate];
[sender setTitle:@"START" forState:UIControlStateNormal];
}else{
tim = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(reloadpdf) userInfo:nil repeats:YES];
[sender setTitle:@"STOP" forState:UIControlStateNormal];
}
}
-(void)reloadpdf{
NSURL *URL = [NSURL URLWithString:@"http://mazur.me/SwiftInFlux/docs/6.3-beta1.pdf"];
NSURLRequest *URLreq = [NSURLRequest requestWithURL:URL];
[web loadRequest:URLreq];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
Rmw ++;
_Label.text = [NSString stringWithFormat:@"Received memory warning. %d",Rmw];
// Dispose of any resources that can be recreated.
}
@end
view raw gistfile1.m hosted with ❤ by GitHub
//ここまでソース

ソースの簡単な説明
 1.起動時にWebviewを生成
 2.Webviewを画面いっぱいに広げる
 3.http://mazur.me/SwiftInFlux/docs/6.3-beta1.pdfを読み込ませる。
 4.1.5秒間隔でタイマー発動
 5. 同じPDFを再度読み込ませてる(1.5秒間隔でループ)

その他memorywarning受けるとカウントアップしてラベルに表示するようにしてます。

Air2はiOS8.1 8.2 8.3で確認
実行結果1(Air2)
 実行後どんどんメモリ使用量が上がっていく
 実メモリの半分あたりでmemorywarning発生(35回くらい)
 なぜかゆるやかにメモリ使用量が減ってく(←謎)
 MAX使用量の半分あたりでフリーズ(か落ちる)

実行結果2(Air2)
 実行後どんどんメモリ使用量が上がっていく
 実メモリの半分あたりでmemorywarning発生(35回くらい)
 フリーズ(か落ちる)

実行結果3(Air iOS8.1.3、iPad4 iOS 8.1)
 実行後どんどんメモリ使用量が上がっていく
 実メモリの半分あたりでmemorywarning発生(1回のみ)
 一気に起動直後くらいのメモリ使用量まで減る
 その後何故か増えていかない(うまい具合に開放してる?)

共通してどれも起動後はメモリ使用量が増えていくこと。
なんなんでしょうねコレ

ローカル上のPDFでも同じでした。
ソースに記載してあるPDFだとファイルサイズ小さいのでメモリ使いきるまでちょっと時間かかるかも。
自分はWin7のピクチャーに最初から入ってたペンギンの画像をPDF化して使いました。

Webviewの使い方間違ってるのかな・・・?
でもURLにPDF指定すればいいだけだよね・・・????


ん~困ったなぁ・・・・



追記
WKWebviewだと一時間で1MB※くらい増えてく
 UIWebviewよりだいぶマシ

デメリット
 WKWebViewだとiOS8からとなる
 ローカルファイルが開けない
  →tmpにコピーすればいけるけどめんどくさいし開けててもエラー吐く
   →めんどくさいしググってもよくわからないエラー吐くから気持ち悪い
   →tmpにすでに同名のファイルがあるとコピー時にエラー?吐く
    →これもまためんどくさい。tmp内全部削除すりゃいいけど

メリット
 メモリリークがいつ発生するのかビクビクしなくて良くなる。


※1.6MBのPDFの場合

コメント

このブログの人気の投稿

セサミサイクル1(初代)が壊れた

LinkBudsのバッテリー交換をしてみた

特価のiPhone14を契約してきた