【原创】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. 分享下VellLock源代码。。。VellLock正式开源

    一个月前就准备发布,一直没网,今天在我同学家蹭了个网,就早点发布吧:点我获取源代码 简介地址:http://vell001.clanmark.com/forum/forum.php?mod=viewt ...

  2. vim配置vimrc详解

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  3. POJ2429 - GCD & LCM Inverse(Miller–Rabin+Pollard's rho)

    题目大意 给定两个数a,b的GCD和LCM,要求你求出a+b最小的a,b 题解 GCD(a,b)=G GCD(a/G,b/G)=1 LCM(a/G,b/G)=a/G*b/G=a*b/G^2=L/G 这 ...

  4. redis在.NET下的使用

    windows SEVER包:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload windows仅用来测试,性能不如在lin ...

  5. $1200元 设计数据挖掘模型及对应RESTful Web Service

    利用MongoDB和NodeJS/Java设计数据挖掘模型以及对应的RESTful Web Service.要求:1. 精通MongoDB集群的配置2. 精通MongoDB Sehll的使用3. 精通 ...

  6. java中的"goto"--label

    java中没有goto,但是goto是保留字.例如int goto;是不合法的. 但是java中有标签,仅作用在多重循环的continue和break中. continue和break只能作用于本层循 ...

  7. PHP操作SQLITE

    一直以来.我们操作SQLITE,都是基于PHP默认的SQLITE操作模块. 今天介绍一个能够操作SQLITE2,和SQLITE3的PHP类,此为我封装的. <? php abstract cla ...

  8. PHP 函数:intval()

    intval   变量转成整数类型. 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型. ...

  9. SQL Server2000企业管理器在Win7中新建表错误的解决方法

    Sql Server2000建表错误与解决方法: 在Windwos7中SQL Server 2000企业管理器在新建表时会提示错误,尝试各种方法均告无效,包括升级SP3和SP4,最终发现如下规律可以暂 ...

  10. <BEA-141281> <unable to get file lock, will retry ...> --reference

    I ran into this error the first time I restarted Weblogic on one of my installs, the only reference ...