【原创】http://www.cnblogs.com/luoguoqiang1985

  • ARC

【新的规则】

1. you cannot explicitly invoke dealloc, or implement or invoke retainreleaseretainCount, or autorelease

你不能显示调用 dealloc, 或者实现和调用retainreleaseretainCount, or autorelease

2.You cannot use NSAllocateObject or NSDeallocateObject

你不能使用 NSAllocateObjectNSDeallocateObject

3.you cannot use object pointers in C structures.

你不能使用C结构体指针。

4. You cannot use NSAutoreleasePool objects

你不能使用NSAutoreleasePool对象

5.you cannot use memory zones

你不能使用zones内存。

-----------------------------------------------------------------------------------------------------

【语言关键字】

@autoreleasepool

官方解释:

Autorelease pool blocks provide a mechanism whereby you can relinquish ownership of an object, but avoid the possibility of it being deallocated immediately (such as when you return an object from a method). Typically, you don’t need to create your own autorelease pool blocks, but there are some situations in which either you must or it is beneficial to do so.

自动释放池块提供了一个释放对象机制,但是避免立刻释放(正如当你从一个方法返回一个对象)。通常情况下,你不需要创建自己的自动释放池块,但也有一些情况,即要么你必须或有利于这样做。

There are, however, three occasions when you might use your own autorelease pool blocks:
If you are writing a program that is not based on a UI framework, such as a command-line tool.
If you write a loop that creates many temporary objects.
You may use an autorelease pool block inside the loop to dispose of those objects before the next iteration. Using an autorelease pool block in the loop helps to reduce the maximum memory footprint of the application.

If you spawn a secondary thread.
You must create your own autorelease pool block as soon as the thread begins executing; otherwise, your application will leak objects. (See “Autorelease Pool Blocks and Threads” for details.)

三种情况时可能会使用自己的自动释放池块:

如果你正在编写一个不基于一个UI框架,如一个命令行工具程序;

如果你编写创建许多临时对象的循环;

您可以使用一个自动释放池块内循环的下一次迭代之前,将这些对象。在循环中使用一个自动释放池块有助于减少应用程序的最大内存占用;

【属性描述关键字】先罗列一下关键字吧,

retain  / strong:  strong 和 retain 类似。在新版中,strong为默认描述属性。它实现的功能相当于释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 。

assgin :  简单赋值,针对值类型。如int, float....

weak   : 跟assign差不多,唯一不同是对象被销毁后自动变为nil。

copy    :  获得输入对象的一份副本,而不是输入对象的引用。使用copy的类,要实现NSCopying协议。

【局部变量】

__strong  它是默认的。一个对象仍然“活着”,只要有强指针指向它。

__weak    指定一个引用,但是不会保持被引用对象“活着”。弱引用被设置为nil当有对象没有强引用。

__unsafe_unretained 指定一个引用,但是不会保持被引用对象“活着”。并且当对象没有强引用,它不会设置为nil。当被引用对象销毁后,指针会是一个野指针。

__autoreleasing 它用于参数传递类型是id *,在返回的时候自动释放

----------------------------------------

注:集合类型使用强引用去跟踪它们的内容。(the collection classes use strong references to keep track of their contents)

  • 非ARC

retain方法 release方法
 新建对象时,使用autorelease方法

使用NSAutoreleasePool

注意集合引用对象时是强引用。

ios专题 -内存管理 研究的更多相关文章

  1. 理解 iOS 的内存管理

    远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...

  2. iOS ARC内存管理

    iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...

  3. iOS之内存管理(ARC)

    iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方 ...

  4. 说说iOS与内存管理(上)

    http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...

  5. iOS的内存管理和引用计数规则、Block的用法以及三种形式(stack、malloc、global)

    学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类 ...

  6. 【iOS系列】-iOS中内存管理

    iOS中创建对象的步骤: 1,分配内存空间,存储对象 2,初始化成员变量 3,返回对象的指针地址 第一:非ARC机制: 1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对 ...

  7. iOS - OC 内存管理

    1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...

  8. Cocos2d-x内存管理研究<二>

    http://hi.baidu.com/tzkt623/item/46a26805adf7e938a3332a04   上一篇我们讲了内核是如何将指针加入管理类进行管理.这次我将分析一下内核是如何自动 ...

  9. Cocos2d-X内存管理研究<一>

    http://hi.baidu.com/tzkt623/item/651ca7d7a0aff6e055347f67        半夜没事干,研究内核,作为我cocos2d-x的第一篇教程.cocos ...

  10. 总结 IOS 7 内存管理

    [iOS7的一些总结].iOS中的内存管理 我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法, 即自动引用计数A ...

随机推荐

  1. marvell笔试题(嵌入式软件)

    有幸去Marvell参加面试,由于其要求WCDMA/GSM之类的,我还特地恶补了下这方面的知识.后来坐了2个小时的地铁后,到达了Marvell.公司还蛮不错的,里面环境都还可以.我投了这家公司也是同学 ...

  2. Linker Special Section Types

    转载自http://processors.wiki.ti.com/index.php/Linker_Special_Section_Types#NOLOAD_Sections_2 Introducti ...

  3. A题进行时--浙大PAT 1001-1010

    pat链接:http://pat.zju.edu.cn 1 #include<stdio.h> 2 int main(){ 3 int a,b; 4 int c; 5 while(scan ...

  4. 转移python

    这段时间一直学python,工作需要做一个基于python的web管理系统,恶补Django. 之前一直觉得开发人员只需要掌握了某个技术就OK了,没有重视总结学习的知识,最近经历的事情让我改变了之前的 ...

  5. httpclient在抓取网页时出现速度慢的情况分析

    问题: 最近在使用httpclient3.0 来做项目,在一台机器部署系统后,发现此机器比其它机器在抓取页面的速度上慢了大概4s,左右. 项目是部署在局域内网,所以代码中都是直接写的IP地址 .在使用 ...

  6. 数值类对象:NSNumber,NSValue,NSNull

    基本,集合,复杂,对象 可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中. 用对象封装基本数值后,即可给其发送消息. 数值类型包括:NSNumber,NSValue,N ...

  7. CoreLocation框架的使用

    CoreLocation框架使用 一.地图和定位的简介 1.应用场景 周边:找餐馆/找KTV/找电影院(团购APP) 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(地图APP) 2 ...

  8. snowflake算法(java版)

     转自:http://www.cnblogs.com/haoxinyue/p/5208136.html 1. 数据库自增长序列或字段 最常见的方式.利用数据库,全数据库唯一. 优点: 1)简单,代码方 ...

  9. vs自带服务测试工具

    在vs安装目录有一个vs自带的服务测试工具,地址为: "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Wcf ...

  10. myeclipse断点调试

    (转) 作为开发者,掌握开发环境下的调试技巧十分有必要.去年就想把关于Eclipse断点调试总结下了.因为对时间的掌控程度仍需极大提高,结果拖到今年才写了此篇博文.关于java调试技术还有非常多.如J ...