一 资源打包
1.如果部署版本>=8,并且图片放在Images.xcassets中,图片打包后会被放在Assets.car,并且会对图片资源进行压缩
2.如果部署版本<8.0,图片资源会被放在MainBundle中,并且不会被图片资源进行压缩
3.如果图片直接拖入项目中,不管部署版本是多少,都会被放入到MainBundle中
注意:
1.如果现在不需要支持iOS7,可以将部署版本改成iOS8,这样最终打包的资源会很小
2.如果想要获取其他应用程序的资源,只能是该应用<8.0,iOS88.0以上就无法获取它的资源
二.内存分配
cmd+I 打开工具Instruments ,选择Allocations 检测内存分配工具
三 使用imageName加载图片和使用imageWithContentsOfFile加载图片的场合优缺点及内存分析
使用imageName加载图片
1>相同的图片被加载到内存中,只会加载一次
2>当对象销毁的时候,图片不会被销毁
3>系统管理,不受程序员控制
4>加载到内存当中图片,占据的内存空间较大
使用imageWithContentsOfFile加载图片
1>加载出来的图片就会马上被销毁
2>图片会被重复添加到内存当中
3>加载到内存当中图片,占据的内存空间较小
总结:
1>使用频率非常高,且图片较小的时候,使用imageName加载图片(例如图标/Button)
2>使用频率非常低,切图片较大的时候,使用imageWithContentsOfFile加载图片(例如版本新特性/相册)
四 内存泄漏
注意:大多出现在MRC/CoreFoundation框架中
MRC:创建对象没有Release
CoreFoundation框架:出现creat,copy等关键字时候没有Release
什么是内存泄漏
在开发过程中,如果创建一个对象,系统会为该对象分配一个内存,当该对象不在使用的时候,会回收掉内存,该对象如果不在使用,但是内存没有被回收,就会造成内存泄漏(该销毁的对象没有被销毁)
1.静态内存分析
1>不运行程序,直接程序的内存进行分析
2>通过上下文的语法结构,来得出结论,是否有内存泄漏
3>相对不是很准确,但是如果发现有内存泄漏,可以结合代码,具体查看
选中当前项目
2.动态内存分析
1>真正运行起来程序,分析是否内存泄漏
2>借助工具进行分析
3>一旦发现内存泄漏,基本可以确定存在内存泄漏,一定结合代码去修改
五 私有API(如果使用,不运行上架)
不能运行上架的原因
1.私有API比较底层,和操作系统相关(拿到用户隐私:通话记录/短信)
2.一些不太稳定的API(使用过程中,会出现各种bug)
3.UISegment界面统一化
六 硬件信息的获取
例:该微博来自于iPhone6plus 64g版
1.获取手机型号
2.获取磁盘一共多少空间,剩余多少空间
1.如果部署版本>=8,并且图片放在Images.xcassets中,图片打包后会被放在Assets.car,并且会对图片资源进行压缩
2.如果部署版本<8.0,图片资源会被放在MainBundle中,并且不会被图片资源进行压缩
3.如果图片直接拖入项目中,不管部署版本是多少,都会被放入到MainBundle中
注意:
1.如果现在不需要支持iOS7,可以将部署版本改成iOS8,这样最终打包的资源会很小
2.如果想要获取其他应用程序的资源,只能是该应用<8.0,iOS88.0以上就无法获取它的资源
二.内存分配
cmd+I 打开工具Instruments ,选择Allocations 检测内存分配工具
三 使用imageName加载图片和使用imageWithContentsOfFile加载图片的场合优缺点及内存分析
使用imageName加载图片
1>相同的图片被加载到内存中,只会加载一次
2>当对象销毁的时候,图片不会被销毁
3>系统管理,不受程序员控制
4>加载到内存当中图片,占据的内存空间较大
使用imageWithContentsOfFile加载图片
1>加载出来的图片就会马上被销毁
2>图片会被重复添加到内存当中
3>加载到内存当中图片,占据的内存空间较小
总结:
1>使用频率非常高,且图片较小的时候,使用imageName加载图片(例如图标/Button)
2>使用频率非常低,切图片较大的时候,使用imageWithContentsOfFile加载图片(例如版本新特性/相册)
四 内存泄漏
注意:大多出现在MRC/CoreFoundation框架中
MRC:创建对象没有Release
CoreFoundation框架:出现creat,copy等关键字时候没有Release
什么是内存泄漏
在开发过程中,如果创建一个对象,系统会为该对象分配一个内存,当该对象不在使用的时候,会回收掉内存,该对象如果不在使用,但是内存没有被回收,就会造成内存泄漏(该销毁的对象没有被销毁)
1.静态内存分析
1>不运行程序,直接程序的内存进行分析
2>通过上下文的语法结构,来得出结论,是否有内存泄漏
3>相对不是很准确,但是如果发现有内存泄漏,可以结合代码,具体查看
选中当前项目
2.动态内存分析
1>真正运行起来程序,分析是否内存泄漏
2>借助工具进行分析
3>一旦发现内存泄漏,基本可以确定存在内存泄漏,一定结合代码去修改
五 私有API(如果使用,不运行上架)
不能运行上架的原因
1.私有API比较底层,和操作系统相关(拿到用户隐私:通话记录/短信)
2.一些不太稳定的API(使用过程中,会出现各种bug)
3.UISegment界面统一化
六 硬件信息的获取
例:该微博来自于iPhone6plus 64g版
1.获取手机型号
2.获取磁盘一共多少空间,剩余多少空间