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执行的机器指令.通常代码区是共享的,即其它执行程 ...
随机推荐
- 第10章 Docker Machine 相关问题
10.1 打开命令行后,看到下载啥 boot2docker.iso,然后总是超时失败,怎么办? 装了 Docker Toolbox 的 Windows 用户,或者第一次使用 docker-machin ...
- MariaDB二进制包简单安装部署
一.简介: MySQL最早是由Michael Widenius在所研发,而在后来Michael先生以10亿美元的价格把MySQL卖给了SUN以后不久SUN就被Oracle公司给收购了,在Oracle收 ...
- zxing 二维码扫描 配置和使用
本文转载至 http://blog.csdn.net/a6472953/article/details/8796501 二维码扫描使用最多的主要有两个库:zbarSDK 和zxing 关于zbar ...
- 求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)
题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关 ...
- NOIP2011提高组(选择客栈)
题目链接:http://codevs.cn/problem/1135/ 题目大意:中文题...就不解释了 题目思路:看了其他巨巨的blog写的,dp思路 #include <iostream&g ...
- DropdownList异步刷新GridView数据
前台代码: <div style=" clear:both; width:800px; text-align:center; margin-left:auto; margin-righ ...
- 查看虚拟机里的Centos7的IP(四)
这里之所以是查看下IP ,是我们后面要建一个Centos远程工具Xshell 连接Centos的时候,需要IP地址,所以我们这里先 学会查看虚拟机里的Centos7的IP地址 首先我们登录操作系统 用 ...
- CF85D Sum of Medians
CF85D Sum of Medians 题意翻译 一个集合,初始为空.现有三个操作: 1.add:向集合里加入数x,保证加入前集合中没有数x: 2.del:从集合中删除数x,保证删除前集合中有x: ...
- python——random模块
用法示例: import random # 1)随机小数 print(random.random()) # 获取大于0且小于1 之间的小数 random.random() print(random.u ...
- Python3.6全栈开发实例[024]
24.文件a1.txt内容(注意每行中的空格是不一样的,需要对空格进行处理)序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linu ...