我正在使用在主线程上执行的跟随代码来截取屏幕截图(不是self.view的子视图)视图,然后在UI
ImageView中显示.一切都在功能方面运行良好,但是因为这个代码是在扩展上运行的,所以存在更严格的内存界限(我读过~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.