在Objective-C的内存管理中,其实就是引用计数(reference count)的管理。内存管理就是在程序需要时程序员分配一段内存空间,而当使用完之后将它释放。如果程序员对内存资源使用不当,有时不仅会造成内存资源浪费,甚至会导致程序crach。
1:什么是内存管理
①移动设备内存是有限,每个应用的内存也是有限
②当应用程序所占用的内存较多时,系统会发出警告,这时候就需要回收一些不再使用的内存资源
③内存管理适用范围:所有的oc对象都需要管理内存,基本类型的对象不需要管理内存
2:引用计数
①引用计数的创建:当oc对象被创建的时候,系统会自动给该对象创建一个引用计数的属性
②对象的基本结构
a.每个oc对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有对少人正在使用这个OC对象
b.每个oc对象内部专门有4个字节的存储空间来存储引用计数器
③引用计数的作用:管理内存
④引用计数的操作:(改变引用计数的方法)
a:当用alloc,new, (mutable)copy,创建对象的时候,对象的引用计数为1
b:当给对象发送retain消息时候对象的引用计数+1
c:当给对象发动release消息的时候对象的引用计数-1
d:当对象的引用计数为0的时候,对象会自动被释放,对象的引用计数不为0,对象会一直存在
e:当给对象发送retainCount消息的时候可以获得当前对象的引用计数的值
3.管理黄金法则
a.谁创建,谁释放(relese)
b.字符串的内存管理
对于字符串内存管理的说明:对于字符串而言,非常不遵守黄金法则。因为从字符串的引用计数而言,乱七八糟。但这只是一个表象,其实内部还是遵守的。
我们要做的是,我们依旧要遵守黄金法则的规则来使用字符串。
(①:当用alloc,new, copy,mutableCopy创建对象的时候,默认对象的引用计数为1
②:当给对象发送retain消息的时候,对象对象的引用计数+1
③:当给对象发送release消息的时候,对象对象的引用计数-1
④:当对象的引用计数变成0的时候对象被自动销毁,当对象的引用计数不为0的时候,对象不会被销毁
⑤:当给对象发送retainCount消息的时候,可以获取对象当前的引用计数个数)
4.内存管理方式
ARC Automatic Reference Counting,自动引用计数,由xcode,帮我们去管理内存。(ARC的本质:ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。)
MRC Manual Reference Counting,手动引用计数,我们手动管理内存。
5.如何将工程改称MRC
xcode5,工程创建的时候是ARC的,我们如果想要MRC,需要进行如下设置。
选中工程 - target - Bulid Settings - 搜索:automatic reference counting或auto,将Objective-C Automatic Reference Counting改为NO。
6.不同于XCode4可以在创建工程时选择关闭ARC,XCode5在创建的工程是默认开启ARC,没有可以关闭ARC的选项。
如果需要对特定文件开启或关闭ARC,可以在工程选项中选择Targets -> Compile Phases -> Compile Sourcesÿ