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执行的机器指令.通常代码区是共享的,即其它执行程 ...
随机推荐
- JS异步笔记
Promise 最早接触异步是在.net中,当时还是比较流行使用基于控件的BackgroundWorker,其自身通过子线程的方式来异步处理一些情况,并且封装了一些功能与主线程通信.后来,开始使用Th ...
- phpcms v9 配置sphinx全文索引教程
英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html 一.首先需要在服务器上安装sphinx 在Windows上安装sphinx 1. ...
- hdu5334(2015多校4)--Virtual Participation(构造)
题目链接:pid=5334">点击打开链接 题目大意:给出一个数字k,要求做出一个长度小于等于10^5的序列.该序列中不同样的连续子序列有k个. 构造啊,.,,,,一点辙都没有 使用连 ...
- Eclipse调试部分手机不显示日志问题解决
在拨号键盘输入一串指令,然后会进入到工程模式,最后可以在Log设置里面设置了. 华为:*#*#2846579#*#* 酷派:*20121220#
- coreData笔记
1. CDVehicle *vehicle = (CDVehicle *)[[NSManagedObject alloc] initWithEntity:entity insertIntoMan ...
- "无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" —— 的解决方法
Oramts.dll 文件公开登记 Oracle 连接所涉及到在通过 Microsoft 分布式事务处理协调器 (MSDTC) 启动的事务中的公共 API. 在事务处理环境中运行时, Syste ...
- 160824、ionic添加地图站点
1.基本的地图显示 <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset= ...
- Vuejs2.0 cnpm 安装脚手架项目模板
NPM 方法 因为npm 安装速度慢,所以我们可以使用淘宝的镜像cnpm 再安装之前 我们需要先安装nodejs 因为vue框架也是基于nodeljs 下载地址:http://nodejs.cn/d ...
- 如何在Pycharm设置ES6语法环境
首先 如果不进行相关设置就刚ES6 语法的话,会出现下面提示性错误(运行还是能正常出效果的): (let 飘红, 这只是其中之一, 其他语法也会飘红) 接着,就是解决问题: 首先打开设置: 接着找到下 ...
- Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...