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内存管理的更多相关文章

  1. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease   Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...

  2. Objective C 内存管理[转]

    1  配对原则 alloc – release new – release retain - release copy – release 2  new和alloc-init的区别 (1)区别只在于a ...

  3. objective C 内存管理及属性方法具体解释

    oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...

  4. Objective -C Memory Management 内存管理 第一部分

    Objective -C Memory Management  内存管理  第一部分 Memory management is part of a more general problem in pr ...

  5. Objective-C(内存管理)

    引用计数器 每个OC对象都有一个占4个字节存储空间的引用计数器 当使用或创建一个对象时,新对象的引用计数器默认是1 retain:可以使引用计数器+1 release:可以是引用计数器-1 retai ...

  6. Objective C----手动管理内存和自动管理内存

    对象的引用计数(Reference Counting) 正常情况下,当一段代码需要访问某个对象时,该对象的引用的计数加1:当这段代码不再访问该对象时,该对象的引用计数减1,表示这段代码不再访问该对象: ...

  7. IOS学习笔记3—Objective C—简单的内存管理

    今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...

  8. objective-c(内存管理)

    本文主要记录objective-c 内存管理的知识点: 1.objective-c的对象都是分配内存在堆上,与C的mallock和C++的new类似,只有int等系统变量分配内存在栈上: 2.obje ...

  9. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  10. iOS - OC 内存管理

    1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...

随机推荐

  1. Swift开发第一篇——异常处理及断言

    本篇分两部分: 1.错误和异常处理 2.Swift 中的断言 1.错误和异常处理 在 OC 开发中,我们通常会将 error 置为 nil NSError *error; BOOL success = ...

  2. 用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  3. LeetCode 6 ZigZag Conversion(规律)

    题目来源:https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is writt ...

  4. 烂泥:ubuntu安装KVM虚拟机管理virt-manager

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 打算学习KVM的图形界面管理器virt-manager,但是virt-manager只有linux系统的,没有windows下的.所以只能使用linux ...

  5. HTTP Session原理

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  6. 初次使用Docker的体验笔记

    一.前言 Docker容器已经发布许久,但作为一名程序员如今才开始接触,实在是罪过--        在此之前,我还没有对Docker进行过深入的了解,对它的认识仍停留在:这是一种新型的虚拟机.这样的 ...

  7. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  8. 绘制复数图形和双y轴图形

    clearclct=0:0.1:2*pi;x=sin(t);y=cos(t);z=x+i*y;subplot(1,3,1)plot(t,z,'r') %注:这种方式下,不论参数t,z哪个是复数,都将忽 ...

  9. shell script 学习笔记-----命令执行

    1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...

  10. 利用Google Speech API实现Speech To Text

    很久很久以前, 网上流传着一个免费的,识别率暴高的,稳定的 Speech To Text API, 那就是Google Speech API. 但是最近再使用的时候,总是返回500 Error. 后来 ...