OC对象内存管理


Objective c对象内存管理

1,管理范围
> :任何继承了NSObject的对象,基本数据类型(int,char,float,double,struct,enum等)是不需要管理内存的。

2,引用计数器
> 每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,既有多少人正在使用这个OC对象
> 每个OC对象内部专门有4个字节的存储空间来存储引用计数器
> 当使用alloc,new或者copy创建一个新对象时,新对象的引用计数器默认就是1
> 当一个对象引用计数器值为0时,对象占用的内存就会被系统回收,换句话说,如果对象的计数器不为0,那么在整个程序运行过程,它占用的内存就不可能被回收,除非整个程序已经退出。
> 可以给对象发送retainCount消息获得当前的引用计数器值
> 给对象发送一条retain消息,可以使引用计数器+1(retain方法返回对象本身)
> 当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收

> 给对象发送一条release消息,可以是引用计数器-1


3,dealloc方法
> 当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
> 一般会重写dealloc方法,在这里释放相关资源 ,dealloc就像对象的遗言
> 一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用


4,retain和release
一句话总结:谁retain,谁release
单对象管理
管理一个对象的内存,只需要return几次,就release几次就好了
多对象管理
难点主要在与多个之间有联系的对象的内存管理(对象组合)
遵循原则:当你想用一个对象的时候,你就给这个对象的引用计数器+1,当你不想用这个对象的时候,你必须給这个对象的引用计数器-1.
(1) ,类A包含类B,即某个对象B是对象A的成员变量,a为类A的一个对象,_b为a对象的一个成员变量,b为类B的一个对象。
  当类B的一个对象b被创建好后,类A的对象a想拿来用,则调用set方法将对象b传给类A成员变量_b,此时对象a的set方法有责任对对象_b计数器+1,即在set方法里面对对象b进行一次retain操作
  对象a对_b的计数器-1的情况有两钟,一种是对象a本身被销毁,第二种是对象a想换一个对象赋给_b。
  第一种情况:对象a本身被销毁
    > 则销毁对象a的dealloc方法有责任在销毁对象a的同时对对象_b计数器-1,即在dealloc方法里面进行一次release操作.
  第二种情况:对象a想换一个对象赋给_b

    > 则在对象a的set方法有责任对旧对象的计数器-1,即在set方法里面条件判断出来传进来的对象是否是旧对象,若是则不做任何操作,若不是则对旧对象进行一次release操作,并对新对象进行retain操作。

(2) ,set方法和dealloc方法代码示例
  Person类包含Car类
// set方法
  - (void)setCar:(Car *)car
  {
  if (car != _car)
  {
  [_car release];
  _car = [car teain];
  }
  }
  // dealloc方法
  -(void)dealloc
  {
  [_car release];
  [super dealloc];
  }


提供了一个基于51单片机的RFID门禁系统的完整资源文件,包括PCB图、原理图、论文以及源程序。该系统设计由单片机、RFID-RC522频射卡模块、LCD显示、灯控电路、蜂鸣器报警电路、存储模块和按键组成。系统支持通过密码和刷卡两种方式进行门禁控制,灯亮表示开门成功,蜂鸣器响表示开门失败。 资源内容 PCB图:包含系统的PCB设计图,方便用户进行硬件电路的制作和调试。 原理图:详细展示了系统的电路连接和模块布局,帮助用户理解系统的工作原理。 论文:提供了系统的详细设计思路、实现方法以及测试结果,适合学习和研究使用。 源程序:包含系统的全部源代码,用户可以根据需要进行修改和优化。 系统功能 刷卡开门:用户可以通过刷RFID卡进行门禁控制,系统会自动识别卡片并判断是否允许开门。 密码开门:用户可以通过输入预设密码进行门禁控制,系统会验证密码的正确性。 状态显示:系统通过LCD显示屏显示当前状态,如刷卡成功、密码错误等。 灯光提示:灯亮表示开门成功,灯灭表示开门失败或未操作。 蜂鸣器报警:当刷卡或密码输入错误时,蜂鸣器会发出报警声,提示用户操作失败。 适用人群 电子工程、自动化等相关专业的学生和研究人员。 对单片机和RFID技术感兴趣的爱好者。 需要开发类似门禁系统的工程师和开发者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值