OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
自动释放池:
@autoreleasepool {
}
内存管理机制 谁污染,谁治理
垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理.
OC从版本2.0之后开始支持垃圾回收机制,但iOS开发平台不支持垃圾回收机制
继承自NSObject的对象需要内存管理
OC中通过引用计数器管理内存
通过引用计数器管理内存的两种方式
1.MRC:(maual reference count),手动引用计数,就是开发人员通过引用计数管理内存
2.ARC:(Automatic reference count),自动引用计数,由系统自动通过引用计数管理内存
ARC是基于MRC创建出来的
使用alloc生成对象的时候会将引用计数由0变为1
打印引用计数
retainCount:引用计数
打印retainCount 需要在ARC之下.
retainCount占4个字节
当retainCount变为0的时候,会自动调用dealloc方法.
-(void)dealloc{
NSLog(@"%@对象已经被销毁",_name);
[superdealloc];//必须调用super的dealloc,且写在最下面
}
僵尸对象:所占内存已经对回收的对象.僵尸对象不能再使用.
野指针:指向僵尸对象的指针.
空指针;没有指向任何东西的指针(nil,NULL,0).如:per1=nil;
操作空指针不会报错
alloc对应dealloc retain对应relase
autorelease和release的区别
1.autorelease相比release,也是对引用计数器执行减一操作,但不是立即减一,而是在未来的某个时刻减一(出了自动释放池)
2.autorelease的实质;对一个对象使用autorelease操作,这个对象的引用计数不会立即减一,对象会被放到自动释放池里,待出了释放池才减一
for (int i=0; i<1000000; i++) {
Person *person=[[Personalloc]init];//1
//数组会对添加的对象做一次引用计数+1
// 数组在释放自己之前,会对之前添加的所有元素release操作(引用计数-1)
[array addObject:person];//2
[person release];//1
}
copy的使用:
对象使用copy的前提:这个类遵循了NSString ,且必须实现协议内的方法.
把某一内存区域的内容拷贝一份,拷贝到新的内存空间⾥去,被拷⻉区域的引⽤计数不变,新的内存区域的引用计数为1。
-(id)copyWithZone:(NSZone *)zone{
//浅拷贝:拷贝的是指针(地址)
// return [self retain];
//深拷贝:拷贝的是内容.
// 返回一个新的对象,跟原来的对象所占空间大小相同,空间内的内容也是相同的
Person *p=[[PersonallocWithZone:zone]init];
p.name=self.name;
return p;
}
new:申请内存并将retainCount从0变1
-------------------
//内存管理了原则
// +1:alloc,copy,new,retain
// -1:release,autorelease
// 一旦对象的引用计数器为0,系统会自动调用dealloc方法,之后就不能再对对象进行操作
// 谁污染谁治理
//自动释放池的两种形式
//1.
@autoreleasepool {
}
//2.自动释放池的另一种形式(想当于自己建立的释放池)
NSAutoreleasePool *pool=[[NSAutoreleasePoolalloc]init];
[pool release];
版权声明:本文为博主原创文章,未经博主允许不得转载。
OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏的更多相关文章
- linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏
1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...
- shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16:38 89人阅读 评论(0) 收藏
1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...
- shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏
最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...
- linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏
1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...
- ubuntu14.04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10:30 199人阅读 评论(0) 收藏
ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...
- linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14:27 21人阅读 评论(0) 收藏
1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...
- shell脚本调试 分类: 学习笔记 linux ubuntu 2015-07-14 12:49 53人阅读 评论(0) 收藏
1.sh -x script 这将执行脚本并显示所有变量的值 如,脚本: #!/bin/bash #a test about shift if [ $# -le 0 ] then echo " ...
- shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏
格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...
- Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏
Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...
随机推荐
- H5本地存储一
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...
- Codeforces Round #289 (Div. 2, ACM ICPC Rules) E. Pretty Song 算贡献+前缀和
E. Pretty Song time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- c++ primer plus 第四章 课后题答案
#include<iostream> #include<string> using namespace std; int main() { string first_name; ...
- Codeforces C - String Reconstruction
C - String Reconstruction 方法一:把确定的点的父亲节点设为下一个点,这样访问过的点的根节点都是没访问过的点. 代码: #include<bits/stdc++.h> ...
- c# 获取方法所在的命名空间 类名 方法名
平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...
- 肠道型(enterotype)简介
An enterotype is a classification of living organisms based on its bacteriological ecosystem in the ...
- English trip WeekEnd-Lesson 2018.11.10
本周末上了三节课,做个小结吧\(^o^)/~: [102] 新概念一早读 - 27 - 28 Teacher: March Mrs. Smith's living room is lar ...
- 想3分钟搭建图像识别系统?这里有一份TensorFlow速成教程(转)
http://www.voidcn.com/article/p-wyaahqji-dr.html 从我们见到的各种图像识别软件来看,机器似乎能认出人脸.猫.狗.花草.各种汽车等等日常生活中出现的物体, ...
- ASP.NET网页生命周期事件
网页事件 典型的使用方式 PreInit PreInit事件是网页生命周期中非常早起的一个事件,在PreInit事件触发之后,就会加载用户设置信息与网页主题.我们通常使用PreInit事件来执行下列处 ...
- dup的使用(二)
转自:http://blog.csdn.net/yeyuangen/article/details/6852682 一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运 ...