首页 > 代码库 > Objective-c内存管理

Objective-c内存管理

cocoa中的内存管理机制 引用计数

  • 每一个对象都拥有一个引用计数
  • 当对象创建的时候,引用计数的值是1
  • 当发生retain消息时,该对象的引用计数+1,该对象的引用计数为2
  • 当向这个对象发送release消息时,该对象的引用计数减1
  • 当一个对象的应用计数为0时,系统自动调用dealloc方法,销毁该对象。

 

      示范代码:

        Person *person =[[Person alloc]init];

        NSLog(@"Person 1:%ld",[person retainCount]);

        [person retain];

        NSLog(@"Person 2:%ld",[person retainCount]);

        [person retain];

        NSLog(@"Person 3:%ld",[person retainCount]);

        [person release];

        NSLog(@"Person release1:%ld",[person retainCount]);

        [person release];

        NSLog(@"Person release2:%ld",[person retainCount]);

       [person release];

对象所有权的基本概念

  • 如果创建或者复制某个对象时,则拥有了该对象的所有权。
    alloc,allocwithzone,copy,copyWithZone,mutableCopy,mutableCopyWithZone;
  • 如果没有创建对象,而是将对象保留使用,则同样拥有该对象所有权。
    retain
  • 如果你拥有了摸个对象所用权,在不需要某个对象时,需要释放它们。
    release,autorelease

释放对象引用方法

//设置器

-(void) setCPU:(CPU *) cpu

{

    if (_cpu!=cpu) {//对象不等于当前对象

        [_cpu release];//释放旧对象

        _cpu=[cpu retain];//保留当前对象

    }

}

 初始化方法 

//字符串

-(id) initWithName:(NSString*)name{

  self=[super init];

  if(self){

   _name=[name copy];}

    return self;

}

//对象

-(id) initWithEngine:(id*)name{

  self=[super init];

  if(self){

   _engine=[engine retain];}

return self;

}

 

并且在dealloch方法中释放对象

-(void)dealloc

{

[_name release]

[engine release]

[super dealloc]

}

点语法内存管理

赋值

assign 直接赋值

 

retain 保留对象

 

copy 拷贝对象

读写性

readwrite 默认生成 getter setter

readonly 生成getter方法

 

原子性

atomic多线程保护

noatomic不存在多线程保护,性能好写。

区别

Objective-c内存管理