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

Objective-c内存管理

时间:2014-11-25 23:24:09      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:使用   sp   strong   on   log   cti   bs   代码   ad   

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 直接赋值

 bubuko.com,布布扣

retain 保留对象

 bubuko.com,布布扣

copy 拷贝对象

bubuko.com,布布扣

读写性

readwrite 默认生成 getter setter

readonly 生成getter方法

 

原子性

atomic多线程保护

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

区别

bubuko.com,布布扣

Objective-c内存管理

标签:使用   sp   strong   on   log   cti   bs   代码   ad   

原文地址:http://www.cnblogs.com/suxun/p/4121911.html

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