gpt4 book ai didi

ios - 主线程上昂贵的 renderInContext 内存使用

转载 作者:IT王子 更新时间:2023-10-28 23:38:04 30 4
gpt4 key购买 nike

我正在使用在主线程上执行的以下代码来截取 屏幕外(不是 self.view 的 subview ) 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

最佳答案

内存峰值不是由于 renderInContext: 调用,尽管包括指向它的工具在内的所有内容,但它是由于捕获的 UIView 的 subviews 。在我的情况下,这是一个错误的约束,导致 UITextView 将其 height 设置为 2000

对于遇到此类问题但无法解决的任何人,请从 renderInContext: 继续并查看您的 subview 以确保它们正确。

关于ios - 主线程上昂贵的 renderInContext 内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914780/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com