OC_内存管理
- 1.Person *person =[ [Person alloc]init];
- 2.Person *person = [Person new];
- 3.NSMutableString *array = [NSMuatbleString stringWithString :@“”];
- [array setObjetct:person];
- 4、[person retain];
- 1.[person release];
- 2.[array removeObject:person];
- +(Person *)personWithName:(NSString *)name andAge:(NSInteger)age
- {
- self = [super init];
- if(self)
- {
- _name = name;
- _age = age;
- }
- return self;
- }
/*类方法:
1.在类方法中,由于还没有创建对象实例,所以:self指针不能使用;
2.实例变量不能在类方法中使用;*/
- +(Person *)personWithName:(NSString *)name andAge:(NSInteger)age
- {
- //类方法是通过类名使用的,没有创建对象实例变量
- return [[Person alloc]initWithName:name andAge:age];
- //类方法中的返回是具体的类型;
- }
- -(void)setName:(NSString *)name
- {
- if(_name != name )
- {
- //要将原来对象的所有权释放掉
- [_name release];
- //在获得新的对象的所有权
- _name = [name retain];//保留一个name的计数,获得所有权;
- }
- }
- -(void)dealloc
- {
- [super dealloc];
- }
- //1.创建对象会获得对象所有权
- Integer *i1 = [Integer integerWithInteger:10];
- NSLog(@"retainCount = %lu",[i1 retainCount]);
- //2.通过指针赋值,不获得对象所有权;
- Integer *i2 = i1;//不获得对象所有权
- NSLog(@"retainCount = %lu",[i2 retainCount]);
- //3.通过retain获得对象所有权
- [i1 retain];//获得对象所有权
- NSLog(@"retainCount = %lu",[i1 retainCount]);
- //4.将对象添加到容器中,获得对象所有权,容器中会获得对象的一个引用
- NSMutableArray *arr = [NSMutableArray array];
- [arr addObject:i1];
- NSLog(@"retainCount = %lu",[i1 retainCount]);
- //5.通过releas释放对象所有权,
- [i1 release];
- NSLog(@"retainCount = %lu",[i1 retainCount]);
- //6.从容器当中删除对象,也会释放对象所有权
- [arr removeObject:i1];
- NSLog(@"retainCount = %lu",[i1 retainCount]);
- //7.最后再释放一次,对象才会被正常销毁
- [i1 release];
OC_内存管理的更多相关文章
- OC_内存管理(二)对象复制、循环引用问题、自动释放池
循环调用: 1.循环引用的问题 两个对象A.B,有可能会出现特殊情况:A中包含B的实例变量:B中也包含A的实例变量,如果这两个实例变量都是强引用(A有着B的实例变量所有权,B也有A的实例变量所有权 ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- PHP扩展-生命周期和内存管理
1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...
- linux2.6 内存管理——逻辑地址转换为线性地址(逻辑地址、线性地址、物理地址、虚拟地址)
Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Linux运行在虚拟存储空间,并负责把系 ...
- linux2.6 内存管理——概述
在紧接着相当长的篇幅中,都是围绕着Linux如何管理内存进行阐述,在内核中分配内存并不是一件非常容易的事情,因为在此过程中必须遵从内核特定的状态约束.linux内存管理建立在基本的分页机制基础上,在l ...
- Objective-C内存管理之引用计数
初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存 ...
- Quartz2D内存管理
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #239619 } p.p2 ...
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- linux内存管理
一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分: 1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程 ...
随机推荐
- Shader 优化笔记
如果shader中采了深度图,但是实际上相机没开深度图的话,会严重降帧. 做uv动画时应该 o.uv1.xy = v.uv * _Layer1_ST.xy + frac(_Layer1_ST.zw * ...
- Unity3D学习笔记——UIScrollBar和UIScrollView使用
UIScrollBar和UIScrollView结合使用效果图如下: 一:使用步骤 1.创建一个UIScrollView 2.然后创建一个UIScrollBar 3.打开UIScrollView ...
- OpenCV学习笔记:opencv_core模块
一,简介: opencv最基础的库.包含exception,point,rect,size,slice,vector,matrix,image等数据结构,和相应的操作函数,以及一些基础算法. 二,分析 ...
- Oracle Delete与系统资源
在用Delete删除数据时,SQL语句首先要通过全表扫描或索引扫描找到符合条件的记录并删除. 然而在这个过程中将消耗大量的CPU资源,I/O资源以及UNDO数据. 如果删除的数据量较大,将极大的影响系 ...
- 【BZOJ3620】似乎在梦中见过的样子 KMP
[BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...
- 【BZOJ3073】[Pa2011]Journeys 线段树+堆优化Dijkstra
[BZOJ3073][Pa2011]Journeys Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在 ...
- 利用libpcap分析网络上的数据包(入门级)
本文可任意转载,但请保留作者及出处作者:rainfish出处:http://blog.csdn.net/bat603/经过几天的突击,终于明白了怎样在局域网内抓包,这可是我多年来的梦想.首先说说我的学 ...
- 《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?
原创文章,欢迎转载.转载请注明:关东升的博客 看下面的示例代码是不是使用过: var studentList: String[] = ["张三","李四",&q ...
- 《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?
原创文章,欢迎转载.转载请注明:关东升的博客 我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). ...
- sqlserver 脚本和批处理指令小结
一.脚本基础 1.USE语句 设置当前数据库. 2.声明变量 语法:DECLARE @变量名 变量类型 在声明变量后,给变量赋值之 ...