【问题标题】:Memory management when using UIImage使用 UIImage 时的内存管理
【发布时间】:2010-09-30 00:29:26
【问题描述】:

我的应用程序大量使用 UIImage 对象根据用户输入和之前设置的图像更改单个 UIImageView 上的图像。我使用 [UIImage imageNamed:] 创建我的 UIImage 对象。

我想这不是使用 UIImage 的最佳方式,因为我的内存使用量会随着时间的推移而不断增加,而且永远不会下降。 (当我使用对象分配运行应用程序时才知道这一点,而且我没有使用其他 NSString 变量,只有 BOOL 和 UIImage)

我应该如何有效地使用 UIImage 和 UIImageView 对象来保持低内存?

谢谢

【问题讨论】:

    标签: iphone cocoa-touch memory-management


    【解决方案1】:

    要使用图像管理内存,正如@russtyshelf 所说,您必须将图像文件转换为数据并将其转换为图像,但之后您必须使图像实例为零以清理缓存内存。即在 viewdidload() 你必须写成:

    let image = [UIImage imageWithData:imageData];
    

    并且在控制器的 deinit 或切换视图期间,您的图像必须为零,即

    image = nil
    

    【讨论】:

      【解决方案2】:
      [UIImage imageNamed:] 
      

      将您正在加载的图像缓存到内存中。如果您想一遍又一遍地重复使用同一组图像,这很好,但如果您不断显示不同(或大)图像,那么您应该使用:

      NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
      NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
      
      [UIImage imageWithData:imageData];
      

      改为。

      【讨论】:

      • 谢谢生锈。我正在使用同一组图像。但是这种方法在代码中使用的次数达到了 200 次左右。如果有图像缓存,为什么内存使用量会随着时间的推移而不断增加?没有泄漏。
      • 仅仅因为泄漏报告没有泄漏并不意味着没有泄漏;)更重要的是,除非您发布您的代码,否则我无法确定。
      • 我在使用图片时遇到了同样的问题,我想知道如果我们从 sqlite 数据库中获取图片需要使用什么代码。
      • 直接使用UIImage *image=[[UIImage alloc]initWithContentsOfFile:imagePath];怎么样
      • 会比dataWithContentsOfFileimageWithData快吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2011-08-17
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多