黑马程序员——Objective-C内存管理机制——黑马 IOS 技术博客
来源:互联网 发布:淘宝论文修改多少钱 编辑:程序博客网 时间:2024/05/19 13:15
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Objective-C内存管理机制
1.Objective-C中所有对象都在堆区建立,由程序员负责释放对象所占用的内存。内存管理机制由3种:
垃圾回收、引用计数、C语言方式。
2.垃圾回收是Mac OS10.5提供的新方案,在系统存在一个垃圾收集器。如果发现某个对象没有被任何对象使用,该对象被自动释放。
3.C语言方式,原始内存管理方式。用户手动调用malloc、calloc函数分配内存,free回收内存。
4.引用计数机制:对象创建后,运行时系统通过对象维护的一个计数器来描述有多少个其他对象在使用自己,当计数器为0时,释放该对象占用的内存空间(该对象调用dealloc方法)。
5,内存管理规则:当使用alloc,new或copy创建一个对象时,对象的引用计数被设置为1.;向对象发送retain消息,对象引用计数加1;向对象发送release消息时,对象引用计数减1;当对象引用计数为0时,运行时系统向对象发送dealloc消息并回收对象所占用的内存。
6.注意:如果类的实例变量时对象指针,则必须重载dealloc方法(例如圆circle类:有一个变量point是Point*类型);dealloc方法不能直接调用,只有对象的引用计数为0的时候,系统会自动向对象发送dealloc消息。
关于属性的assign、retain、copy关键字生成set方法
assign:简单赋值 浅拷贝 常用于内置类型
-(void)setX(int):aX
{
x = aX;
}
retain: 常用于指针类型,节省内存
例如:圆Circle类中有一个圆心center是Point(用户自定义点类型)和int型半径r
-(void)setPoint(Point*):aPoint
{
if(center != aPoint)
{
[centerrelease]; //原圆心对象引用计数-1
[aPoint retain]; //参数对象引用计数+1
center = aPoint; //这里是指针赋值
}
}
或者
-(void)setPoint(Point*):aPoint
{
[aPoint retain]; //参数对象引用计数+1
[center release]; //原圆心对象引用计数-1
center = aPoint; //这里是指针赋值
}
对应init方法中
-(id)init
{
Point* aPoint = [[Point alloc]init];
self.center = aPoint;
[self.center release];
return self;
}
或者
-(id)initWithPoint:(Point*)aPoint
{
self.point = aPoint;
}
copy: 好处就是重新给center分配内存,避免了retain中center与参数aPoint两个指针同时指向同一个内存对象,但浪费内存。
例如还是上面例子
-(void)setPoint(Point*):aPoint
{
if(center != aPoint)
{
[center release];
center = [[Pointalloc]initWithX:aPoint.x andY:aPoint.y];
}
}
- 黑马程序员——Objective-C内存管理机制——黑马 IOS 技术博客
- 黑马程序员——Objective-C 内存管理详解——黑马 IOS 技术博客
- 黑马程序员——Objective-C的内存管理MRC与ARC——黑马 IOS 技术博客
- 黑马程序员——Objective-C IOS开发模板——黑马 ios 技术博客
- 黑马程序员——为什么 Objective-C 很难——黑马 ios 技术博客
- 黑马程序员——Objective-C语言简介——黑马 ios 技术博客
- 黑马程序员——Objective-C中的Category(类别)——黑马 IOS 技术博客
- 黑马程序员——Objective-C语法快速参考——黑马 IOS 技术博客
- 黑马程序员——IOS学习三:Objective-C的扩展OOP,类别,内存管理等——黑马 ios 技术博客
- 黑马程序员——IOS学习之二:Objective-C基础语法和关键字——黑马 ios 技术博客
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之17-内存管理和自动引用计数——黑马 IOS 技术博客
- 黑马程序员——Objective-c学习笔记——类(面向对象)——黑马 ios 技术博客
- 黑马程序员——Objective-C分类 (category)和扩展(Extension)——黑马 ios 技术博客
- 黑马程序员——外企Objective-C面试题(英语版)——黑马 ios 技术博客
- 黑马程序员——Objective C中数组排序几种情况的总结——黑马 ios 技术博客
- 黑马程序员——objective-c数组的四种遍历方法总结——黑马 ios 技术博客
- 黑马程序员——Objective-C中3种枚举方法耗时比较——黑马 ios 技术博客
- 黑马程序员—Objective-C内存管理
- Ubuntu安装虚拟机XP系统 实现文件的共享
- android5.0 音乐播放,加载extractor
- 不容易系列之(4)——考新郎
- 第6章 穿什么有这么重要?-装饰模式 大话设计模式
- 用vc实现备忘录功能
- 黑马程序员——Objective-C内存管理机制——黑马 IOS 技术博客
- Java面向对象(三)
- 冬至作于厦门
- 一个日历问题的C语言,C++(boost),python,Javascript,Java和Matlab的实现
- SQL小记
- Min Stack (Java)
- Nginx配置之基于域名的虚拟主机
- [免费参加] 2015微软社区大课堂Community Camp开放报名啦!
- 外观模式(Facade) - 为系统分层次