OC的内存管理 与 引用计数

引用计数


引用计数增加
+ alloc 开辟内存 引用计数从 0 到 1
- retain 不管原来内存使多少 加 1
- copy 1.原来的不变 2.新开辟内存 从 0 到 1
- release 原来的基础上 减 1 release(释放)
-autorelease 自动释放

7.0之后 新建的工程默认都是arc的。

Student * stu = [[Student alloc] init];

打印当前对象的引用计数 试用 - retainCount 方法
NSLog(@"当前的引用计数:%lu",[stu retainCount]);

[stu retain]; //对当前的对象的引用计数 加 1

NSLog(@"当前的引用计数:%lu",[stu retainCount]);
[stu copy];
[stu release]; 使当前对象的引用计数 减 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);

reason:' - [Student copyWithZone:]:unrecognized selector sent to instance 0x100201c40' 错误原因: 对象调用错了方法

[stu autorelease]; //当前不 减 1 在未来某个地方引用计数 减 1

NSLog(@"当前的引用计数:%lu",[stu retainCount]);






内存管理


1.内存的所有权
只有对内存又所有权的对象 才能够release 改变引用计数
alloc retain copy 都能使对象获得内存的所有权
release autorelease 都能使对象放弃内存的所有权

2.又创建就有回首 有 加 1 就有 减 1

3.引用计数的概念

4.在一个方法/类 中 内存的引用计数要保持平衡

5.dealloc方法 在对象的引用计数为0时 系统强制调用 用于回收内存.

6.属性的内存管理 对象类型的属性 需要在dealloc中释放一次

7.自动释放池 负责释放池子范围内所有被标记为autorelease的对象 @autoreleasepool {}
如果是NSAutoreleasePool 对象创建的池子 使用drain 可以清空池子李的所有对象

8.构造器的内存管理
在返回这个对象的时候 使用autorelease



.m
dealloc 内部实现

- (void)dealloc
{
NSLog(@"租车行奉命回收车");
// 一个类的dealloc方法 需要调用父类的delloc
// 所有代码都要写在[super dealloc]之前
//永远不要手动调用它
[super dealloc];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值