当前位置:首页 > 内存 > 正文

c实现内存管理(怎么看内存是g1还是g2模式)

  • 内存
  • 2024-04-23 12:58:35
  • 7921

一、objective-c使用什么机制管理对象内存Objective-C内存管理机制
1.Objective-C中的所有对象都是在堆中创建的,程序员负责释放对象占用的内存。内存管理机制分为三种类型:
垃圾收集、引用计数和C语言
2.垃圾收集是MacOS10.5提供的新解决方案。系统中有一个垃圾收集器。如果检测到某个对象没有被任何其他对象使用,则该对象将被自动释放。
3.C语言方法,本机内存管理方法。用户手动调用malloc和calloc函数来分配和释放内存。
4.引用计数机制:创建对象后,运行时系统使用该对象维护的计数器来描述有多少其他对象正在使用它。当计数器达到0时,内存将被占用。对象被释放空间(对象调用dealloc方法)。
5.内存管理规则:当使用allocate、new、copy创建对象时,该对象的引用计数设置为1;数量增加
1;当向对象发送release消息时,对象引用计数减1;当对象引用计数为0时,运行时系统向该对象发送dealloc消息,回收占用的内存。按对象。
6.注意:如果类实例变量是对象指针,则必须重载dealloc方法(例如circle类:有一个Point*类型的点变量);dealloc方法不能直接调用,只有当对象的引用计数为0时,系统才会自动向该对象发送dealloc消息。
介绍属性的赋值、保留和关键字复制以创建集合方法
赋值:简单赋值,常用于内置类型的浅复制
-(void)setX(int):aX
{
x=aX;
retain:常用于Type指针,存储内存
例如:Circle类中有一个圆心叫Point(类型为用户自定义点),radius为int类型r
-(void)setPoint(Point*):aPoint
{
if(center!=aPoint)
{
[centerrelease];//初始中心对象引用编号-1
[aPointretain];//参数对象引用编号+1
center=aPoint;//这是指针赋值


-(void)setPoint(Point*):aPoint
{
[aPointretain];//参数对象引用计数+1
[centerrelease];//中心对象初始引用计数-1
center=aPoint;//这是一个指针赋值
对应init方法
-(id)init
{
Point*aPoint=[[Pointalloc]init];
=aPoint;
[release];
returnself;

-(id)initWithPoint:(Point*)aPoint
{
=aPoint;
copy:优点是重新分配内存到center,避免了retain中的两个center指针和aPoint参数同时指向同一个内存对象,但是这样浪费了内存miss。
示例:上面的示例
-(void)setPoint(Point*):aPoint
{
if(center!=aPoint)
{
[centerrelease];
center=[[Pointalloc]initWithX::aPoint.y];
}