關(guān)于renderInContext造成的crash問(wèn)題,在ios8上crash概率還是比較大的,目前以下方式?jīng)]什么問(wèn)題,已通過(guò)性能測(cè)試,無(wú)多大影響。
afterScreenUpdates參數(shù)為YES時(shí),如果有首次進(jìn)入界面,默認(rèn)有下拉刷新時(shí),會(huì)造成類似卡幀的效果。
afterScreenUpdates為NO有彈窗時(shí),側(cè)滑返回有部分空白,可能截屏還沒(méi)完成就已經(jīng)返回了。
故建議做版本限制,只能避免iOS8大面積的crash,根本上還是沒(méi)有解決,其它系統(tǒng)仍然有概率crash。
- (UIImage *)capture {
if (CGRectIsEmpty(TOP_VIEW.frame)) {
return nil;
}
//renderInContext該方法為渲染view.layer,此方法容易造成內(nèi)存暴漲。
UIGraphicsBeginImageContextWithOptions(view.bounds.size,view.opaque, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()];
if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
BOOL isComplate = [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
}else{
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}