ios专题 -内存管理 研究
【原创】http://www.cnblogs.com/luoguoqiang1985
- ARC
【新的规则】
1. you cannot explicitly invoke dealloc, or implement or invoke retain, release, retainCount, or autorelease
你不能显示调用 dealloc, 或者实现和调用retain, release, retainCount, or autorelease
2.You cannot use NSAllocateObject or NSDeallocateObject
你不能使用 NSAllocateObject 或 NSDeallocateObject
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专题 -内存管理 研究的更多相关文章
- 理解 iOS 的内存管理
远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...
- iOS ARC内存管理
iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...
- iOS之内存管理(ARC)
iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方 ...
- 说说iOS与内存管理(上)
http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...
- iOS的内存管理和引用计数规则、Block的用法以及三种形式(stack、malloc、global)
学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类 ...
- 【iOS系列】-iOS中内存管理
iOS中创建对象的步骤: 1,分配内存空间,存储对象 2,初始化成员变量 3,返回对象的指针地址 第一:非ARC机制: 1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对 ...
- iOS - OC 内存管理
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
- Cocos2d-x内存管理研究<二>
http://hi.baidu.com/tzkt623/item/46a26805adf7e938a3332a04 上一篇我们讲了内核是如何将指针加入管理类进行管理.这次我将分析一下内核是如何自动 ...
- Cocos2d-X内存管理研究<一>
http://hi.baidu.com/tzkt623/item/651ca7d7a0aff6e055347f67 半夜没事干,研究内核,作为我cocos2d-x的第一篇教程.cocos ...
- 总结 IOS 7 内存管理
[iOS7的一些总结].iOS中的内存管理 我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法, 即自动引用计数A ...
随机推荐
- 【CSS】Intermediate2:Pseudo Classes
1.specify a state or relation to the selector selector:pseudo_class { property: value; } 2.Link 3.Dy ...
- Java笔记(三)……基础语法
关键字 标识符 在程序中自定义的一些名称 由26个英文字母大小写,数字:0-9,符号:_ $组成 定义合法标识符规则: 数字不可以开头. 不可以使用关键字. Java中严格区分大小写. 注意:在起名字 ...
- HW4.41
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- HDOJ-ACM1004(JAVA)
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5502876.html JAVA语言实现: 拿到题目第一反应是用HashMap实现,但是感觉用HashMap实在太浪 ...
- 给新手的 10 个有用 Linux 命令行技巧
我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端.那时候我觉得命令难以记忆,不能正确使用它们.随着时间推移,我意识到了 Linux 终端的 ...
- epoll原理解释(转)
转自:http://yaocoder.blog.51cto.com/2668309/888374 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. ...
- 订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
很多网友对这类名词概念非常陌生,如果没用过FEED订阅,肯定还会对诸多网站显示的FEED聚合.订阅.ATOM等等非常郁闷,虽然这几个名字间的很多并非并列关系,天缘只是有意把它们放到一起,方便对比参考, ...
- 分页存储过程--From:桌面备份 -> sql2005新功能.docx
二.以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序. USE AdventureWorks; GO WITH OrderedOrders AS (SELECT Sale ...
- node.js在windows下的学习笔记(1)---安装node.js
1.首先打开http://www.nodejs.org/ 2.选择DOWNLOADS,跳转到下面的画面,我的系统是windows7的32位.所以选择.msi的32bit版本. 3.下载后,得到一个5. ...
- struts2 struts.xml配置文件详解
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...