zoukankan      html  css  js  c++  java
  • imageNamed与imageWithContentsOfFile对于图片应用程序内存的影响,不可小视

      + (UIImage *)imageNamed:(NSString *)name方法是在application bundle的顶层文件夹寻找名字的图象 , 如果找到图片, 系统缓存图象。图片内容被加载到系统内存中,使用时直接引用到系统内存。

      所以当处理大量图片时,程序使用的内存会迅速上升导致内存警告并退出。

      特别在使用Interface Builder建立界面时,如果直接拖动UIImageView 并设置image的图片名称。InterfaceBuilder 正是通过UIImage 类的imageName方法加载图片。图片被缓存,导致内存使用较大。且无法释放,即使release掉 UIImageView也无济于事。

     

      为避免这种error,可以使用如下方法:

        NSString *path = [[NSBundle mainbundle] pathForResource:@" " ofType:@" "];

        UIImage *image = [UIImage imageWithContentsOfFile:path];

      当然,对于图片处理等相关程序,可以直接为UIImage写一个catagory,重载imageNamed方法,如下:

        @implementation UIImage(imageNamed_Hack) 

        + (UIImage *)imageNamed:(NSString *)name

         { 
          return [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], name ] ];

        } 
        @end

     

      关于imageWithContentsOfFile方法的内部实现,有待进一步研究,也希望高手赐教。

  • 相关阅读:
    SQL Server 数据库定时自动备份
    SQL SERVER 2012设置自动备份数据库
    SyncNavigator 数据库同步软件怎么用?
    SyncNavigator下载|SyncNavigator数据库同步软件 v8.4.1
    关于数据同步的几种实现
    课堂练习-找水王:
    软件工程第十四周总结
    Alpha版(内部测试版)发布
    软件工程第十三周总结
    意见评论汇总
  • 原文地址:https://www.cnblogs.com/kingOfPointer/p/2652069.html
Copyright © 2011-2022 走看看