内存管理的总结

内存管理

基本数据类型(int,float,double,char,struct,enum)的数据内存不需要内存管理

1 对象的内存管理 

诞生 alloc或new或copy

生存 接收消息和执行操作

交友 借助方法的组合和参数,调用方法

销毁 内存被释放 delloc:相当于被释放内存的临终遗言,每个内存被销毁之前都会调用dealloc方法


2 引用计数

1 Cocoa采用引用计数也叫作保留计数
2 alloc new copy 用这三个方法创建对象时,对象的引用计数器为1
3 retain 给对象发retain消息后,对象的引用计数器加1
4 release 给对象发送release消息后,对象引用计时器减1
5 dealloc 当一个对象的引用计数器变为0而即将被销毁时,oc自动向对象发送一个dealloc消息,通常在自己的对象中重写dealloc方法
6 retainCount 获取当前对象的引用计数器的值
使用 注意:需先关闭xcode上的ARC
QYPerson *someone =[[QYPerson alloc] init];
NSLog(@"count>>>%ld",[someone retainCount]);
[someone retain];
NSLog(@"count>>>%ld",[someone retainCount]);
[someone release];
NSLog(@"count>>>%ld",[someone retainCount]);
[someone release];
NSLog(@"count>>>%ld",[someone retainCount]);

 

3 对象所有权

1 如果一个对象拥有指向其它对象的实例变量,则称该对象拥有这些对象,复合关系,例如:汽车对象car1中的实例变量_tire指向了轮胎类创建的对象tire1,tire1和car1就是复合关系
2 如果一个函数创建了一个对象,则称该函数拥有它创建的对象

4 super dealloc

作用:是把从父类继承过来的成员变量release,这是对继承机制的合理利用,注意
release的顺序是先release本类的成员变量,最后再调用父类的release

5 自动释放

自动释放池是一个存放实体的集合,这些实体可能是对象

6 总结

1 自己生成的对象,自己持有
NSObject *obj1=[NSObject new];   //计数器为1
//copy
 [obj1 release];

 


2 不是自己生成的对象,不用关心对象内存的销毁
NSString *str1=[NSString stringWithFormat@"xxxx,%d",112];
//但是可以自己持有
NSString *str2=[NSString stringWithFormat:@"mmm,%d",1122f];
NSArray *arr1=[NSArray arrayWithObject:@"222",@"adf",nil];
NSMutableArray *arr2=[NSMutableArray arrayWithArray:arr1];
 

 


3 自己生成的对象不再使用的时候需要release
NSObject *obj3=[NSObject new];
[obj3 release]; //销毁

4 对象销毁之后,对象指针需要置成nil
野指针:指针变量指向的内存空间别释放之后,指针变量没有进行初始化,这样的指针就是野指针
内存泄露:内存创建完成之后,没有释放销毁,就会造成内存泄露
obj3=nil; //


5 如果是自己编写创造对象的函数(工厂方法),返回的对象不知道什么时候需要被销毁,可以自动释放

7 内存管理的黄金法则

1 谁创建的谁销毁

2 谁retain(例如:setter),谁release(不再使用的时候,更换复合对象,销毁对象本身的时候)


 ARC自动内存管理

__strong 强引用,默认就是,不用写

__weak 弱引用,可以解决强引用的循环引用和自我引用出现的内存泄露问题

__autoreleasing ARC下自动释放

__unsafe__unretained 一般不使用,可以对标量进行修饰。但是,修饰的制作不会被置为nil,所以还可以继续访问原来的对象地址,但是对象已将被销毁,该内存随时可能被重新分配使用,所以是不安全的。

在ARC中不能使用retain,release,retaincount,dealloc,ARC在本质上讲就是在程序适当的位置插入retain和release语句

 

转载于:https://www.cnblogs.com/k-on/p/4694672.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值