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执行的机器指令.通常代码区是共享的,即其它执行程 ...
随机推荐
- fabric 自动化部署
fabric 项目发布和运维的工作相当机械,频率还蛮高,导致时间浪费在敲大量重复的命令上. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A ...
- Unity3D学习笔记——NGUI之Property Binding
Property Binding:用于绑定两个组件,然后可以将一个组件的信息发送给另一个组件. 效果图如下: 一:使用步骤 1.建立一个Sprite 2.建立一个Label 3.为Sprite添加Pr ...
- 程序运行缺少MSVCR110.dll
Download Visual C++ Redistributable for Visual Studio 2012 Update 4 from Official Microsoft Download ...
- js 的函数参数的默认值问题
js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simu ...
- [Spring Data MongoDB]学习笔记--_id和类型映射
_id字段的映射: MongoDB要求所有的document都要有一个_id的字段. 如果我们在使用中没有传入_id字段,它会自己创建一个ObjectId. { , "accounts&qu ...
- 前端Js传递数组至服务器端
$("#delete").click(function () { var ID = ""; var ary = []; var bb = document.ge ...
- SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)
(二)列表(SPList) 列表是SharePoint中最为重要的数据容器,我们一般保存在SharePoint中的所有数据,都是保存在列表中(文档库也是一种列表),因此列表对象在SharePoint的 ...
- 关于自我总结的html5新特性
最近本包子制订了一个学校计划,第一步就是了解并总结一下html5现在所含有的新特性,好吧,这只是一个了解,- -! 自己总结了一个word文档,里面很多东西自己都还没实际用过,下一步,本包子要写pc端 ...
- android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结
常见的向用户发送提示信息的方式有3种,分别为: 1)发送Toast信息 2)弹出对话框 3)发送通知 总结如下: 方式1:发送Toast信息: 这种方式最简单,在之前的学习中多次使用过.Toast是在 ...
- debug_backtrace final catch
<?php function backtrace_str(){ $str = ''; $w = 0; $backtrace = debug_backtrace(); foreach($backt ...