我头痛已经持续两天了。一个蹩脚的内存泄漏让我变成了绿巨人。
在模拟器上分析代码时,每次加载任何URL请求后都会出现许多泄漏。但是如果我使用像iPhone 5这样的设备,则只有一个泄漏。
最大的问题是仪器不显示任何我的代码。
我记得曾经看过一个很棒的视频教程来定位这些泄漏,但是两天后仍然无果 :(
这是一个适用于Xcode 5的简单项目,当webView属性加载url请求时,它会出现泄漏。
屏幕截图:一,二。
更新:添加了整个代码。 更新2:微小的重构。
屏幕截图:一,二。
更新:添加了整个代码。 更新2:微小的重构。
#import "AKViewController.h"
@interface AKViewController ()
@property (nonatomic, strong, readonly) UIWebView *webView;
@end
@implementation AKViewController
@synthesize webView = _webView;
#define MARGIN_WEB_VIEW_X 15.0f
#define MARGIN_WEB_VIEW_TOP 30.0f
#define MARGIN_WEB_VIEW_BOTTOM 25.0f
#pragma mark - Private methods
- (CGRect)makeRectForWebView {
CGRect appFrame = UIScreen.mainScreen.applicationFrame;
CGRect rectWebView = CGRectMake(MARGIN_WEB_VIEW_X,
MARGIN_WEB_VIEW_TOP,
appFrame.size.width - MARGIN_WEB_VIEW_X * 2,
appFrame.size.height - MARGIN_WEB_VIEW_BOTTOM);
return rectWebView;
}
- (void)presentViews {
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.webView.frame = [self makeRectForWebView];
[self.view addSubview:self.webView];
}
- (NSURLRequest *)makeLoginURLRequest {
NSString *stringUrl = @"http://google.com/";
NSURL *url = [NSURL URLWithString:[stringUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
return request;
}
#pragma mark - Properties
- (UIWebView *)webView {
if (!_webView) {
_webView = [[UIWebView alloc] initWithFrame:UIScreen.mainScreen.applicationFrame];
_webView.scalesPageToFit = YES;
}
return _webView;
}
#pragma mark - Lifecycle
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self presentViews];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
[self.webView loadRequest:[self makeLoginURLRequest]];
}
@end
求助!