- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到内存激增,仪器中列出的负责调用者是 img_data_lock,负责库是 CoreGraphics
。
我一直在读到该问题与缓存与未缓存图像加载有关( Difference between [UIImage imageNamed...] and [UIImage imageWithData...]? ) 目前我的应用程序通过 imageNamed
用 imageWithContentsOfFile
替换 imageNamed
调用似乎可以解决该问题。
有人有关于 img_data_lock 调用者的任何信息吗?如果imageNamed
对内存造成如此大的影响,为什么有人会使用它呢?
最佳答案
UIImage 的方法 imageNamed: 和 imageWithContentsOfFile: 做的事情略有不同。 imageNamed 将图像加载到特殊的系统缓存中,然后对该图像路径的 future 调用将返回缓存中的图像,而不是从磁盘重新加载图像。 imageWithContentsOfFile 只是在您指定的路径加载图像,但不进行缓存。对同一图像多次调用 imageWithContentsOfFile 将导致内存中产生多个副本。
当发出内存警告时,iOS 似乎不会清空缓存(我不确定是好是坏),这可能会导致应用程序因缺乏可用内存而被终止。使用 imageWithContentsOfFile 加载的 UIImage 通过清除图像并在需要时重新加载来响应内存警告,这可能解释了为什么内存峰值消失了。
此外,模拟器中的缓存似乎比实际硬件中的缓存大得多,我在使用 imageNamed 的 UIImages 中看到的问题和崩溃只发生在设备上。在模拟器上测试时要小心!
我认为使用 imageNamed 的唯一原因是同一张图像在您的 View 中使用了多次。或者,您可以实现自己的图像缓存,并获得可以控制的缓存的好处,如下所述: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/
关于iphone - img_data_lock iPhone - imageNamed 与 imageWithContentsofFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907780/
有一次,我把我所有的图片都放在了APP Bundle里。我使用 imageNamed 函数来获取图像。后来,我决定在应用启动时复制一些图片到文档中。所以,我不能再使用 imageNamed 函数来获取
我正在使用 将图像写入模拟器缓存目录 NSURL *cacheDir = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirect
UIImage *image=[UIImage imageWithContentsOfFile:filePath]; 这个方法我已经用过一百次了,以前总是有效,但现在它只返回“Null”,我用谷歌搜索
当我在 iOS8 beta3 和 beta5 上测试我的应用程序时,我发现了一个关于 [UIImage imageWithContentsOfFile:] 的错误。 当图像资源存储在主包的子包中时,如
我在我的 UITableView 中为标准图像/ TextView 泄漏内存。我正在使用 imageWithContentsOfFile 加载图像并将其分配给我的 cell 的 imageView.i
我有资源: Test.png test1.jpg tesT2.jpg tEst3.jpg 我需要在 UIImageView 中显示此图像。所以我写道: imgView.image = [UIImage
这是我的第一个问题:-) 我有一个图像 icon_new.png 已本地化为 3 种语言。我需要在运行时使用如下方式加载它: NSString *path = [[[NSBundle mainBund
我的 View Controller 上有多个动画,当我播放它们时,内存变得非常高,大约为“450mb”,我一直在寻找阻止这种情况的方法。 我见过的一种方法是不使用; [UIImage imageNa
在这两种方法之间,哪种更好/更有效?更具体地说,应该使用哪一种,还是有适当的时间使用一种? UIImage *img = [UIImage imageWithContentsOfFile:filePa
我有一个表格 View ,其中有 10 个显示图像的单元格。每次滚动时,应用程序都会分配更多内存(但不会在泄漏中显示),但在分配中,我可以看到每次滚动时内存都会增加 2 兆字节。 这是泄漏的代码,特别
我尝试将 imageNamed: 转换为 imageWithContentsOfFile: 但每次都失败了。我看不到细胞上的图片。 UIImage *image = [UIImage imageNam
如果文件被删除,直接从文件加载图像会产生损坏的图像,例如使用 NSURLSession 下载图像并将其加载到文件会产生损坏的图像。 最佳答案 通过将文件内容加载到 NSData,然后使用数据创建图像来
我在这里迷路了。我尝试使用该方法初始化 UIImage 对象。我知道它在文档目录等中查找并且不缓存... 我提供了各自的 URL 或路径,但对象始终为零。该方法永远不会成功。是因为我的路径总是在开头包
我的图像代码是 -(IBAction)start:(id)sender { animation.animationImages = [NSArray arrayWithObjects:
我用 imageWithContentsOfFile: 加载了一个巨大的图像,所以我必须在这个过程中设置一个 activityIndicator。 有什么方法/任何委托(delegate)回调我可
如果图像存储在 xcasset 中,是否有任何方法可以使用 imageWithContentsOfFile: 检索 UIImage 对象 bundle (Xcode 5 图像目录)? 使用imageN
我正在创建一个 tableView,其中包含用户从图库中挑选的图像,然后我将选定的 imagePath 放在 UIImageView. 要在 UIImageView 中设置 iOS 图库图像,我正在使
我需要在 iPad 上显示 20 x 15 网格的图像。每个图像的尺寸为 50 像素 x 50 像素。 我正在使用 [UIImage imageWithContentsOfFile:[[NSBundl
我注意到内存激增,仪器中列出的负责调用者是 img_data_lock,负责库是 CoreGraphics。 我一直在读到该问题与缓存与未缓存图像加载有关( Difference between [U
我正在尝试从 .xcassets 文件中的 LaunchImage 图像集加载图像,但我不想使用imageNamed:,因为它会浪费内存,并且图像只需要在初始启动时显示几秒钟。 我已经尝试了多种方法,
我是一名优秀的程序员,十分优秀!