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 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
随机推荐
- 选择排序(java版)
public class SelectSortTest { public static void selectSort(int[] source) { for (int i = 0; i < s ...
- Jmeter之HTTP Request Defaults
一.HTTP Request Defaults的作用: 该组件可以为我们的http请求设置默认的值.假如,我们创建一个测试计划有很多个请求且都是发送到相同的server,这时我们只需添加一个Http ...
- leangoo更换背景、设置颜色标签功能上线啦!
leangoo看板背景太单调?卡片标签想要添加多个?没有问题,Leangoo的本次更新就给大家带来了漂亮背景和实用的颜色标签设置,接下来就让我们一起来看看吧! 设置背景: 点击看板右上角个人头像图标按 ...
- 第八章 了解tempdb数据库
1.一个sqlserver数据库实例上只能有一个tempdb数据库,这个实例上所有的用户都共享这个数据库.2.tempdb数据库在每次sqlserver重启后都会重新创建,所以数据会丢失.3.因为te ...
- 应用Spring MVC发布restful服务是怎样的一种体验
摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差.基于配置.紧耦合,restful服务性能好.基于约定.松耦合,现在我就把使用Spring MVC发布restful服务的 ...
- cocos2d-x之悦动的小球
发现问题:update()函数不能用virtual前缀 主: bool HelloWorld::init() { if ( !LayerColor::initWithColor(Color4B(255 ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 第22章 DLL注入和API拦截(2)
22.4 使用远程线程来注入DLL 22.4.1 概述 (1)远程线程注入是指一个进程在另一个进程中创建线程,然后载入我们编写的DLL,并执行该DLL代码的技术.其基本思路是通过CreateRemot ...
- [C#] 委托之Action和Func区别
一.说明 一般我们定义委托都是有如下两步: public delegate void MyDelegate(string name);//定义委托 public MyDelegate myDelega ...
- [3D跑酷] MissionManager
前言 许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager 引用关系 首先看下MissionMa ...