一:资源打包
图片资源是放到Images.xcassels里面
1、部署版本在>=iOS8.0的时候,打包的资源包中的图片会被放到Assets.car中,图片有被压缩。
2、部署版本在<iOS8的时候,打包的资源包中的图片会被放到MainBundle里面,图片没有被压缩。
3、图片直接被托到项目中,无论部署版本是多少,都会被放到MainBundle里面,图片没有被压缩
二、内存分配
1、使用imageName:加载图片
(1)加载内存当中之后,会一直停留在内存当中,不会随着对象的销毁而销毁。
(2)加载进去图片之后,占用的内存归系统管理,我们无法管理。
(3)相同的图片,图片不会重复加载。
(4)加载到内存中后,占据内存空间较大。
2、使用imageWithContentsofFile:加载图片
(1)加载到内存当中后,占据内存空间较小。
(2)相同的图片会被重复加载内存当中。
(3)对象销毁的时候,加载到内存中图片会随着一起销毁。
结论:
1、如果图片较小,并且使用频繁的图片,使用ImageName来加载图片(按钮图标/主页里面图片)
2、如果图片较大,并且使用较少,使用imageWithContentsoOfFile:来加载(版本新特性/相册)
三、内存管理
什么内存管理?
堆里不再使用的对象,没有被销毁,依然占据着内存
1、静态内存分析
(1)不运行程序,直接根据程序的语法结果,进行分析。
(2)相对不太准确,但是如果发现有地方提示可能有内存泄露,最好根据实际情况看一下。
2、动态内存分析
如果发现内存泄露,基本可以确定某一个地方确实发生的内存泄露,之后很据实际代码情况来解决该问题。