【发布时间】:2017-12-08 10:43:06
【问题描述】:
我正在使用在主线程上执行的以下代码来截取 屏幕外(不是 self.view 的子视图) 视图的屏幕截图,然后显示在 UIImageView 中.就功能而言,一切正常,但是由于此代码在扩展上运行,因此内存限制要严格得多(我读过大约 30 MB 是上限?),
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.screenshotView.frame.size.width, self.screenshotView.frame.size.height-2), YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.screenshotView.layer renderInContext:context];
_generatedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.previewImageView.image = _generatedImage;
每当按下UIButton 时,都会使用performSelectorOnMainThread 调用此代码所在的方法。还提供了一个UIAlertController 来处理UI 的冻结,但是如果连续按下按钮(在关闭UIAlertController 之后),前几次内存使用量将保持在基线附近(~15 MB),但随后飙升至约 30 MB 并停留在那里,直到几秒钟后再次调用该方法,然后当它完成渲染时,它会回落到约 15 MB。
我不确定是什么导致了这种行为,为什么内存使用量不会一直保持在 ~15 MB 左右,我不确定当连续调用该方法时它出现峰值的原因是什么.听起来更像是一件事有时同时发生?我怎样才能确保不会发生这种情况,并且只有在可以安全地再次渲染而不会增加内存使用时才关闭 UIAlertController。
【问题讨论】:
标签: ios objective-c memory rendering uigraphicscontext