ARC的应用

一、基本简介

1> ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切。

2>ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化。

二、基本原理

1> 规则:

ARC 的规则非常简单:只要还有一个强指针变量指向对象,对象就会保持在内存中。

2>强指针和若指针:

默认所有实例变量和局部变量都是Strong指针。

弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。

三、使用注意

1> 不能调用release、retain、autorelease、retainCount。

2> 可以重写dealloc,但是不能调用[super dealloc]。

3> @property : 想长期拥有某个对象,应该用strong,其他对象用weak。

4> 其他基本数据类型依然用assign。

5> 两端互相引用时,一端用strong、一端用weak。

时间: 2024-07-28 17:34:06

ARC的应用的相关文章

ARC

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了. 该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能.简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码.有一点,ARC并不是G

Block的引用循环问题 (ARC & non-ARC)

Block实现原理 首先探究下Block的实现原理,由于Objective-C是C语言的超集,既然OC中的NSObject对象其实是由C语言的struct+isa指针实现的,那么Block的内部实现估计也一样,以下三篇Blog对Block的实现机制做了详细研究: A look inside blocks: Episode 1 A look inside blocks: Episode 2 A look inside blocks: Episode 3 虽然实现细节看着头痛,不过发现Block果然

MRC与ARC混合开发配置

iOS4.1后,默认为ARC模式,ARC实质上通过编译器特性实现的,只需简单修改下文件配置即可实现. 1.要切换至MRC需要选中当前Project,选择Build Settings,查询框内键入auto,查找到Objective-C Automatic Reference Counting ,将YES选成NO即可.见下图: 2.还可以灵活选择单一或几个文件设置成ARC模式,方法是选择targets,找到Compile Sources,选择所需文件,将flags ,键入-fobjc-arc即可.见

iOS ARC机制

iOS提供了ARC功能,很大程度上简化了内存管理的代码. 1.ARC的本质: 采用ARC后,iOS开发者完全可以抛弃之前繁琐的内存管理机制.在开启ARC的情况下,编译器会自动的在程序的正确位置隐式的插入retain,release和autorelease等.特别明确,ARC只是objective-C编译器的特征,所有ARC相关处理都会发生在构建应用程序的时候,这和内存垃圾回收机制不同. 2.基本的ARC使用规则 1)代码中不能使用retain,release,autorelease等: 2)不能

黑马程序员--ARC

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ARC的判断准则:只要没有强指针指向的对象,就会释放对象 ARC特点: 1>不允许调用release,release,retainCount 2>允许重写dealloc,但是不允许调用[super dealloc] 3>@property的参数 * strong :成员变量时强指针,(适用于OC对象类型) * weak :  成员变量是若指针,(适用于OC对象) * assign: 适

iOS ARC与MRC混编的一些解决方法

1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MRC的程序添加-fno-objc-arc标记,表明在编译时,该文件使用MRC编译 备注: (1) 演示中使用的RegexKitLite还需要导入libicucore.dylib动态库 (2) 如果要在MRC项目中添加ARC的文件,可以使用 -fobjc-arc 标记即可 3> 将MRC的第三方库直接编译成

关闭xCode项目的ARC设置

 ARC forbids explicit message send of 'release' 'release' is unavailable: not available in automatic reference counting mode 今天,遇到了这么样的问题. 很显然,是ARC的问题. 错误原因:因为我们设置了用ARC来管理内存释放,我们却又调用了release方法去释放对象. ARC是什么?(我也贴一段网上的简短说明) ARC是iOS 5推出的新功能,全称叫 ARC(Autom

Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十六.内存管理相关知识(二) 1.autorelease,自动释放机制 - (instancetype)autorelease; (1)自动释放池的创建 iOS5.0之前 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //进行一系列操作 //此处不可以使用

基于Java的Arc Engine二次开发的环境的配置

1.软件准备 ArcGIS for Desktop 10.2, Arc engine, jdk-7u60-windows-i586,Eclipse Mar2 2.软件的安装 2.1 ArcGIS for Desktop 10.2的安装 软件的下载:ArcGIS for Desktop 10.3全套的下载:http://pan.baidu.com/s/1o7F4yue,附带破解方法 本文使用的是10.2,其下载路径与安装破解方法如:http://jingyan.baidu.com/article/

设置ARC有效或者无效

在编译单位上,可以设置ARC有效或者无效.比如对每个文件可以选择使用或者不使用ARC,一个应用程序中可以混合ARC有效或者无效的二进制形式. 设置ARC有效的编译方法如下所示:(Xcode4.2开始默认设定对所有文件ARC有效) *使用clang(LLVM编译器)3.0或以上版本 *指定编译器属性为"-fobjc-arc" 设置ARC有效或者无效,一般两种方式:对所有文件统一操作.对部分文件操作. 1.对所有文件统一操作 需求:有的编程人员为了能更好的理解内存管理机制,刻意将编译器指定