1.内存大小优化
使用Instruments检测内存的突增,检测退出对应功能后内存是否能恢复到原值
图片
不会重复用到的图片使用imageWithContentsOfFile
代替imageNamed
能减少内存占用
也可以自己写一个弱引用的字典来存图片, value存成block;当没有地方用的这个图片的时候就会自动释放了
YYImage 的核心就是学习imageWithContentsOfFile:的方法原理去实现imageNamed:方法. 达到imageNamed:方法中没有缓存功能, 最终使得不需要图片的时候即可销毁图片对象
+ (YYImage *)imageNamed:(NSString *)name {
if (name.length == 0) return nil;
if ([name hasSuffix:@"/"]) return nil;
NSString *res = name.stringByDeletingPathExtension;
NSString *ext = name.pathExtension;
NSString *path = nil;
CGFloat scale = 1;
// If no extension, guess by system supported (same as UIImage).
NSArray *exts = ext.length > 0 ? @[ext] : @[@"", @"png", @"jpeg", @"jpg", @"gif", @"webp", @"apng"];
NSArray *scales = [NSBundle preferredScales];
for (int s = 0; s < scales.count; s++) {
scale = ((NSNumber *)scales[s]).floatValue;
NSString *scaledName = [res stringByAppendingNameScale:scale];
for (NSString *e in exts) {
path = [[NSBundle mainBundle] pathForResource:scaledName ofType:e];
if (path) break;
}
if (path) break;
}
if (path.length == 0) return nil;
NSData *data = [NSData dataWithContentsOfFile:path];
if (data.length == 0) return nil;
return [[self alloc] initWithData:data scale:scale];
}
wkwebview
WKWebView相比于UIWebView
- WKWebView的内存远远没有UIWebView的开销大,没有缓存
- 拥有高达60FPS滚动刷新率及内置手势
- 支持了更多的HTML5特性
- 高效的app和web信息交换通道
- 允许JavaScript的Nitro库加载并使用,UIWebView中限制了
提供加载网页进度的属性(estimatedProgress)
将UIWebViewDelegate与UIWebView拆分成了14类与3个协议
- WKWebView使用和手机Safari浏览器一样的Nitro JavaScript引擎,相比于UIWebView的JavaScript引擎有了非常重要的性能提升
- 苹果提供的 WebKit 库包含了 WKWebView,WKWebView 采用跨进程方案,Nitro JS 解析器,高达 60fps 的刷新率
2.内存泄漏检测
常见内存泄漏
- NSTimer循环引用
- block的循环引用
- 其它对象间相互引用