自动释放池:

@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. 成对HMM(Pair HMMs)用于双序列比对--转载

    http://blog.163.com/bioinfor_cnu/blog/static/19446223720118205527863/ 所有文章:http://blog.163.com/bioin ...

  2. Codeforces Beta Round #94 div2 D 优先队列

    B. String time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  3. 机器学习 MLIA学习笔记(三)之 KNN(二) Dating可能性实例

    这是个KNN算法的另一实例,计算Dating的可能性. import numpy as np import os import operator import matplotlib import ma ...

  4. python tcp

    server import socket host="localhost" port= s=socket.socket(socket.AF_INET,socket.SOCK_STR ...

  5. c++ 多继承 public

    以下代码会报错 #include <iostream> using namespace std; class Sofa { public: Sofa(); ~Sofa(); void si ...

  6. netcat使用指南

    在网络工具中有“瑞士军刀”美誉的NetCat, 在我们用了N年了至今仍是爱不释手.因为它短小精悍(这个用在它身上很适合,现在有人已经将其修改成大约10K左右,而且功能不减少).现在就我的一些使用心得和 ...

  7. ASP.NET调用dos命令获取交换机流量

    protected void btn_Cisco_Click(object sender, EventArgs e) { try { string ip = txt_ip.Value; string ...

  8. 20170112xlVBA查询SQL

    Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...

  9. android--------阿里 Sophix移动热修复

    移动热修复(Mobile Hotfix)是阿里云提供的全平台App热修复服务方案.产品基于阿里巴巴首创hotpatch技术,提供最细粒度热修复能力,让您无需等待实时修复应用线上问题. 移动热修复提供的 ...

  10. Java中/r和/n的区别

    /n换行符,效果是新换一行,光标在原有位置下一行 /r回车符,效果是光标来到下一行行首