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内存管理的更多相关文章
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...
- Objective C 内存管理[转]
1 配对原则 alloc – release new – release retain - release copy – release 2 new和alloc-init的区别 (1)区别只在于a ...
- objective C 内存管理及属性方法具体解释
oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...
- Objective -C Memory Management 内存管理 第一部分
Objective -C Memory Management 内存管理 第一部分 Memory management is part of a more general problem in pr ...
- Objective-C(内存管理)
引用计数器 每个OC对象都有一个占4个字节存储空间的引用计数器 当使用或创建一个对象时,新对象的引用计数器默认是1 retain:可以使引用计数器+1 release:可以是引用计数器-1 retai ...
- Objective C----手动管理内存和自动管理内存
对象的引用计数(Reference Counting) 正常情况下,当一段代码需要访问某个对象时,该对象的引用的计数加1:当这段代码不再访问该对象时,该对象的引用计数减1,表示这段代码不再访问该对象: ...
- IOS学习笔记3—Objective C—简单的内存管理
今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...
- objective-c(内存管理)
本文主要记录objective-c 内存管理的知识点: 1.objective-c的对象都是分配内存在堆上,与C的mallock和C++的new类似,只有int等系统变量分配内存在栈上: 2.obje ...
- iOS学习17之OC内存管理
1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...
- iOS - OC 内存管理
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
随机推荐
- MySQL初步笔记,有待整理
查询表纪录: select * from tb1; 插入一条记录 insert tb1 values(value1,value2,...); 修改表的默认编码: alter table tb1 ch ...
- QA:Failed to deploy artifacts from/to snapshots XX Failed to transfer file Return code is: 405, ReasonPhrase:Method Not Allowed.
QA: Failed to deploy artifacts from/to snapshots XX Failed to transfer file Return code is: 405, Rea ...
- 代码校验工具 SublimeLinter 的安装与使用
SublimeLinter 是 Sublime 的插件,它的作用是检查代码语法是否有错误,并提示.习惯了 IDE 下写代码的人一定需要一款在 Sublime 上类似的语法检查工具.下面我们开始. 安装 ...
- spring mvc4.1.6 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明
一.准备工作 开始之前,先参考上一篇: struts2.3.24 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明 struts2.3 ...
- iperf测试
在服务端运行iperf,输入命令iperf –s –p 12345 –i 1 –M 以在本机端口12345上启用iperf 在客户端运行iperf,输入命令iperf –c server-ip –p ...
- tfs witadmin
有时候对TFS的操作需要使用命令行,因为无图形界面进行操作. 我们可以进入Visual Studio Tools使用Developer Command Prompt进行操作. 使用命令 witadmi ...
- java帮助文档下载
JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和 ...
- PHP通过串口发短信
随技术进步,短信收发领域按时间先后产生了三种模式:BLOCK MODE,基于AT指令的TEXT MODE,基于AT指令的PDU MODE.其中,TEXT MODE比较简单,多款诺基亚手机均支持此款模式 ...
- SQL TUNNING
In a Nested Loops Join, for example, the first accessed table is called the outer table and the seco ...
- lock与C#多线程
lock与C#多线程 lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.简单讲就类似于 你去银行办理业务,一个柜台一次只能操作以为客户,而如果你要到这个柜台办理 ...