OC之内存管理(笔记)

本文详细阐述了内存管理的重要性及其实现方式,包括手动管理、引用计数等机制。介绍了对象从分配到释放的全过程,如何通过alloc、dealloc、retain、release等方法来管理内存,避免程序错误和崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要进行内存管理:
 手持设备内存小;
对象只开辟不释放,程序容易出错或崩溃

管理原则:谁创建,谁销毁
管理方式:手动管理
管理机制:retainCount 引用计数 方式管理对象所占用的内存

1. 使用 alloc 为对象分配内存;使用 dealloc 释放对象所占用的内存。
2. 使用 alloc、new或者copy构造对象时,对象的retainCount为 1。
3. 调用对象的 retain 方法可以增加1 retainCount。
4. 调用对象的 release 方法可以减少1 retainCount。
5. 当对象的retainCount 为 0 时,dealloc 会自动调用,释放对象内存;否则  分配给对象的内存将被一直占用。
6. 所有对象可以使用 retainCount 属性查看当前的计数器值。

retainCount 只是内存管理的一种机制,实际操作中,是不运用它的。
会影响计数器操作的事物:
  • 1. alloc 创建一个对象,并将其引用计数设为 1,并拥有对象所有权
  • 2. copy (NSCopying)制造一个副本,并将副本的引用计数设为 1,并拥有副本所有权
  • 3. retain 使对象引用计数加1,并拥有对象所有权
  • 4. release 使对象引用计数减1,并放弃对象所有权
  • 5. autorelease 向autoreleasepool注册
dealloc 解决内存泄露;回收自身所占用的内存
作为便利构造器创建对象来说,此时返回autorelease ,而不直接用release。

                                     对象              引用计数
alloc                           创建                   +1
retain                          ~~~~                 +1
release                      ~~~~~~              -1
dealloc                       销毁                  回收自身所占用内存
autorelease              ~~~~~             自动释放池结束时,池内所有的自动释放对象都会释放
copy                              创建                +1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值