美文网首页
UIImage的缓存(内存管理)

UIImage的缓存(内存管理)

作者: 云溪_Cloud | 来源:发表于2015-11-30 17:17 被阅读92次

    两种方式加载本地图片

    通过imageNamed:方法加载图片

    1.用过这种方式加载图片,一旦图片加载到内存中,那么就不会销毁,一直到程序退出。(也就是说imageNamed:会有图片缓存的功能,当下次访问图片的时候速度会更快。)

    2.用这种方式加载图片,图片的内存管理并不受程序员控制。

    3.UIImage *image = [UIImage imageNamed: @“image”]的意思是创建一个UIImage对象,并不是说image这个本身就是一张图片,而是image指向一张图片。在创建这个对象的时候实际上并没有把真正的图片加载到内存里,而是等到用到图片的时候才会加载。

    4.如上例,如果把image对象设置为nil,如果是其它对象,那么没有强指针指向一个对象,这个对象就会销毁;但是即使image = nil,它会指向的图片资源也不会销毁。

    通过imageWithContentsOfFile:方式加载图片

    1.使用这个方法加载图片,当指向图片对象的指针销毁或指向其它对象,这个图片对象没有其它强指针指向,这个图片对象会销毁,不会一直在内存中停留。

    2.因为没有缓存,所以如果相同的图片多次加载,那么也会有多个图片对象来占用内存,而不是用缓存的图片。

    3.使用这个方法,需要file的全路径(之前用NSString, NSArray之类的加载文件也是一样的,比如stringWithContentsOfFile:,看到file就知道是需要传入全路径。)

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];

    UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

    4.注意如果图片在Images.xcassets中,是不能使用这个方法的。所以说想要自己进行图片的内存管理(不希望有缓存图片),那么要将图片资源直接拖入工程,而不是放在Images.xcassets中。

    相关文章

      网友评论

          本文标题:UIImage的缓存(内存管理)

          本文链接:https://www.haomeiwen.com/subject/yvjjhttx.html