内存管理(一):基本概念与原理

本文介绍了Objective-C中的内存管理,主要聚焦在引用计数的概念和管理规则,包括自动引用计数(ARC)和手动引用计数(MRC)。讨论了构造函数(init)、析构函数(dealloc)、autorelease和autoreleasepool的工作原理,以及在MRC和ARC模式下如何管理内存。同时,文章提及了内存管理的面试题,如循环引用、block修饰关键字以及为什么使用copy关键字来保护NSString等对象。
摘要由CSDN通过智能技术生成

在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ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值