码迷,mamicode.com
首页 > 其他好文 > 详细

OC学习总结4 内存管理

时间:2015-08-01 21:54:33      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

内存管理

基本数据类型(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 获取当前对象的引用计数器的值
使用
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(不再使用的时候,更换复合对象,销毁对象本身的时候)


 

OC学习总结4 内存管理

标签:

原文地址:http://www.cnblogs.com/k-on/p/4694672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!