自动释放池:

@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) 收藏的更多相关文章

  1. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  2. 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" ...

  3. shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏

    最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...

  4. linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...

  5. ubuntu14.04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10:30 199人阅读 评论(0) 收藏

    ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...

  6. linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14:27 21人阅读 评论(0) 收藏

    1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...

  7. 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 " ...

  8. shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

  9. Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏

    Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...

随机推荐

  1. hdu 5381 The sum of gcd 莫队+预处理

    The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) P ...

  2. python ros topic demo

    发布者: #!/usr/bin/env python #coding=utf- import rospy from std_msgs.msg import String def talker():   ...

  3. 启动tomcat一闪而过问题调试并解决

    之前一直用myelise+tomcat启动项目很正常,今天在尝试用绿色版tomcat8时,点击startup.bat文件时,一闪而过,tomcat未正常启动,也无法看到错误信息.搜索网络查找到调试方法 ...

  4. 【Android】查看包名和首启动activity

    工具:aapt 位置:$ANDROID_HOME/build-tools/版本号/aapt 需要配置环境变量才能使用 aapt dump badging XXXapk 输出信息中重要的有: packa ...

  5. [Java学习] java泛型通配符和类型参数的范围

    本节先讲解如何限制类型参数的范围,再讲解通配符(?). 类型参数的范围 在泛型中,如果不对类型参数加以限制,它就可以接受任意的数据类型,只要它是被定义过的.但是,很多时候我们只需要一部分数据类型就够了 ...

  6. CDS & ORF & 启动子 & 终止子 & 转录因子 & 基因结构 & UTR

    ORF和CDS的区别 ORF的英文展开是open reading frame(开放阅读框). CDS的英文展开是coding sequences (编码区). CDS:DNA转录成mRNA,mRNA经 ...

  7. Style、ControlTemplate 和 DataTemplate 触发器

    本文摘要:    1:属性触发器:    2:数据触发器:    3:事件触发器: Style.ControlTemplate 和 DataTemplate 都有触发器集合.    属性触发器只检查W ...

  8. Confluence 6 结构(Schema )设置

    基本 DN(Base DN) 根专有名称(DN)将会在你在目录服务器上运行查询的时候使用到.例如: o=example,c=com cn=users,dc=ad,dc=example,dc=com 针 ...

  9. websphere设置企业应用使用的jvm最大最小内存

    websphere设置企业应用使用的jvm最大最小内存 设置jvm 内存的最大最小值.打开was管理控制台  点击应用程序服务器-----server1  点击java和进程管理前面的加号  点击进程 ...

  10. Python基础--数据类型

    一.数据类型是什么鬼? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...