ARC内存使用注意事项

时间:2022-09-11 11:32:51

官方介绍:

https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/ManagingMemory.html#//apple_ref/doc/uid/10000160-SW1

整个项目开启关闭ARC,需要在Building Setting中设置:

ARC内存使用注意事项

某个文件关闭ARC,只需对该文件设置:-fno-objc-arc

ARC机制基本规则:
delegate使用方法:@property (assign) <id>xxxDelegate delegate;
delegate和outlet 应该用 weak 属性来声明

在ARC机制下,彻底忘掉retain、release、retainCount和autorelease。以前我们在需要安全使用一个对象时,往往会将该对象retain住,在不需要的时候进行release。在ARC环境下这么做会有编译错误。

在@property声明中,用strong和weak代替相应的retain, copy,和assign。

int, BOOL用assign修饰
__weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil

使用ARC的一些强制规定:

  1. 不能直接调用dealloc方法,不能调用retain,release,autorelease,retainCount方法,包括@selector(retain)的方式也不行
  2. 可以用dealloc方法来管理一些资源,但不能用来释放实例变量,也不能在dealloc方法里面去掉[super dealloc]方法,在ARC下父类的dealloc同样由编译器来自动完成
  3. Core Foundation类型的对象仍然可以用CFRetain,CFRelease这些方法
  4. 不能再使用NSAllocateObject和NSDeallocateObject对象
  5. 不能在C结构体中使用对象指针,如果由类似功能可以创建一个Objective-C类来管理这些对象
  6. 在id和void*之间没有简便的转换方法,同样在Objective-C和core Foundation类型之间的转换都需要使用编译器制定的转换函数
  7. 不能再使用NSAutoreleasePool对象,ARC提供了@autoreleasepool块来代替它,这样更有效率
  8. 不能使用内存存储区(不能再使用NSZone)
  9. 不能以new为开头给一个属性命名
  10. 声明outlet时一般应当使用weak,除了对StoryBoard这样nib中间的顶层对象要用strong
  11. weak相当于老版本的assign,strong相当于retain

老版本的工程是可以转换成使用ARC的工程的,转换规则包括:

  1. 去掉所有的retain,release,autorelease
  2. 把NSAutoRelease替换成@autoreleasepool{}块
  3. 把assign的属性变为weak

其他文章:http://blog.csdn.net/zkdemon/article/details/7446385

dealloc方法的使用:

  • 已经开启了arc,dealloc还可以使用,只是在代码中中不能显示调用,在dealloc方法中不可以包含[super dealloc]。
  • 在dealloc中一般用来解除delegate,例如self.webView.delegate = nil;
  • 开始的时候注册了notification等,那么是需要在dealloc中把这些notification移除掉
  • 如果某个类没有调用dealloc方法,会导致内存泄露,这时要检查在该类内部是否有其他对象调用了该对象导致无法成功释放。

ARC内存使用注意事项的更多相关文章

  1. ARC内存管理机制详解

    ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...

  2. iOS阶段学习第21天笔记&lpar;ARC内存管理-Copy-代理&rpar;

    iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...

  3. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

  4. Delphi中ARC内存管理的方向

    随着即将发布的10.3版本,RAD Studio R&D和PM团队正在制作Delphi在内存管理方面的新方向. 几年前,当Embarcadero开始为Windows以外的平台构建新的Delph ...

  5. iOS MRC ARC 内存管理

    转自:http://www.jianshu.com/p/48665652e4e4 1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用 ...

  6. 2016 - 2 - 19 ARC内存管理知识总结(一,arc基本概念及alloc等方法的实现)

    一. ARC的基本概念 1. 在objc中采用automatic reference counting 机制, 让编译器来进行内存管理.在降低程序崩溃,内存管理泄漏等风险的同时,很大程度减少了程序员的 ...

  7. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  8. iOS ARC内存管理

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

  9. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...

随机推荐

  1. unity3d进行脚本资源打包加载

    原地址:http://www.cnblogs.com/hisiqi/p/3204752.html 本文记录如何通过unity3d进行脚本资源打包加载 1.创建TestDll.cs文件 public c ...

  2. ARM 寄存器的介绍

    ARM  寄存器  31个通用, 32个程序状态寄存器 怎么算的呢: (R0--R15)   16  +  7 + 8  =31 通用 程序状态寄存器:    6 个 共  37 个. 不分组寄存器: ...

  3. MySql 性能优化杂记

    前一段时间接触MySql 服务器,关于查询忧化方面整理,优化主要唯绕几个工具函数 : show profiling  , explain ,  索引 , limit 如果上司抱怨服务器查询太慢,这时候 ...

  4. ✡ leetcode 156&period; Binary Tree Upside Down 旋转树 --------- java

    156. Binary Tree Upside Down Add to List QuestionEditorial Solution My Submissions   Total Accepted: ...

  5. js更新页面,随机更新数字

    代码1: <script> function getRandom(){ var i = Math.random()*40+160; document.getElementById(&quo ...

  6. js关闭浏览器窗口事件

    js关闭浏览器窗口 js关闭浏览器窗口,不弹出提示框.支持ie6+,火狐,谷歌等浏览器. <html> <head /> <body> <script typ ...

  7. Android4&period;4 蓝牙源代码段分析

    最近GOOGLE发布时间Android4.4,我看了看源代码.4.4蓝牙打开过程或这部分的一些变化,判断蓝牙开关是从接口设置settings在里面switch开关,widget当然,它可以切换,也许启 ...

  8. PAT1099&colon;Build A Binary Search Tree

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  9. WINDOWS7环境下Informatica的安装&lbrack;新手&rsqb;

    环境: 操作系统:Windows7(64位): 数据库:Oracle 11g R2: 数据库字符集:UTF-8 一.下载: (参考链接:https://blog.csdn.net/u011031430 ...

  10. SPA

    为什么用SPA 1. 减少服务器压力  如果不用spa  那么每次切换页面的时候,就会向服务器发送一个请求 服务器返回一个html文件   如果使用了SPA  在切换时,不需要请求服务器,只要通过本地 ...