ios – 主线程上昂贵的renderInContext内存使用情况

ios – 主线程上昂贵的renderInContext内存使用情况,第1张

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

解决方法 内存峰值不是由于renderInContext:调用,尽管包括指向它的乐器在内的一切,但它是由于捕获的UIVIEw的子视图.在我的情况下,它是一个错误的约束导致UITextVIEw将其高度设置为2000.

对于任何有这样的问题并且无法弄明白的人,请从renderInContext继续:查看您的子视图以确保它们正确.

总结

以上是内存溢出为你收集整理的ios – 主线程上昂贵的renderInContext内存使用情况全部内容,希望文章能够帮你解决ios – 主线程上昂贵的renderInContext内存使用情况所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存