普通にViewを終了するときに、UIWebViewをreleaceするだけではアプリが落ちることがある。(特にメモリ量が少ないiPhone3Gの場合)
これに対処するコード。
deallocメソッドなどでUIWebViewをreleaceする前に、
webView.delegate = nil;を追加する。
hogeController.h
@interface hogeController : UIViewController{
IBOutlet UIWebView *webView;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@end
hogeController.m
#define kTopMargin 20.0
- (void)viewDidLoad {
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webFrame.origin.y += kTopMargin + 5.0; // leave from the URL input field and its label
webFrame.size.height -= 40.0;
self.webView = [[[UIWebView alloc] initWithFrame:webFrame] autorelease];
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
self.webView.opaque = NO; // お好みに応じて
self.webView.backgroundColor = [UIColor clearColor]; // お好みに応じて
self.webView.scalesPageToFit = YES; // お好みに応じて
self.webView.delegate = self;
[self.view addSubview:self.webView];
[self.webView loadRequest:request];
}
- (void)viewDidUnload {
[super viewDidUnload];
self.webView = nil;
}
- (void)dealloc
{
webView.delegate = nil;
[webView release];
[super dealloc];
}
- (void)viewWillAppear:(BOOL)animated
{
self.webView.delegate = self; // setup the delegate as the web view is shown
}
- (void)viewWillDisappear:(BOOL)animated
{
[self.webView stopLoading]; // in case the web view is still loading its content
self.webView.delegate = nil; // disconnect the delegate as the webview is hidden
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
詳細コードはAppleのサンプルソースUICatalogを参考にすること。
タグ:iPhone
【UIWebViewの最新記事】