ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。
//ARC使用前
@interface NonARCObject : NSObject {
NSString *name;
}
-(id)initWithName:(NSString *)name;
@end
@implementation NonARCObject
-(id)initWithName:(NSString *)newName {
self = [super init];
if (self) {
name = [newName retain];
}
return self;
}
-(void)dealloc {
[name release];
[Super dealloc];
}
@end
//ARC使用后
@interface ARCObject : NSObject {
NSString *name;
}
-(id)initWithName:(NSString *)name;
@end
@implementation ARCObject
-(id)initWithName:(NSString *)newName {
self = [super init];
if (self) {
name = newName;
}
return self;
}
@end
曾经都是这么使用,retain使引用计数+1后使用autorelease自动释放
return [[object retain] autorelease];
而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了。
ARC的好处
如果有像我一样从Java转oc的朋友一定觉得这个太棒了,
1、内存的管理交给编译器处理,不需要我们在担心内存管理上的不当造成泄漏
2、代码变少了,-(void)dealloc{ [x release]; [y release]; }
3、降低大家的错误释放造成低效代码
ARC的缺点
1、有朋友说游戏开发的一些大牛还是习惯手动释放,这样效率会更高!个人比较向往
2、重构一些旧项目,XCode4.2 中缺省ARC就是 ON 的状态,所以编译旧代码的时候往往有"Automatic Reference Counting Issue"的错误信息。
这个时候,可以将项目编译设置中的“Objectice-C Auto Reference Counteting”设为NO
如果只想对某个.m文件不适应ARC,可以只针对该类文件加上 -fno-objc-arc 编译FLAGS
ARC基本规则
retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用
dealloc虽然可以被重载,但是不能调用[super dealloc]
由于ARC并不是GC,并需要一些规则让编译器支持代码插入,所以必须清楚清楚了这些规则后,才能写出健壮的代码。
OC中的对象
强参照(Strong reference)和弱参照(Weak reference)之分,当需要保持其他对象的时候,需要retain以确保对象引用计数加1。对象的持有者(owner)只要存在,那么该对象的强参照就一直存在。
//1
NSString *test1 = [[NSString alloc] initWithString:@"test1"];
//2
NSString *test2 = test1;
//3
test1 = [[NSString alloc] initWithString:@"test1Change"];
//4
NSString *test3 = test1;
//5
test2 = test3;
1、test1作为'test1'对象的最初持有者,是NSString类型对象的强参照
2、将test1带入test2,这里test2也是强参照
3、test1改变内容,生成test1Change字符串,test1变成了该字符串的拥有者,而‘test1’字符串只有test2拥有,他们都在内存中存在
4、test1赋值给test3,这里也是强参照
5、test3赋值给test2,这里的‘Test1’字符串没有拥有者,该对象被释放
弱参照
//1
NSString *test1 = [[NSString alloc] initWithString:@"test1"];
_weak NSString *test2 = test1;
这里当test1被释放时,test2为nil。
NSString __weak *string = [[NSString alloc] initWithFormat:@"First Name: %@", [self firstName]];
NSLog(@"string: %@", string); //此时 string为空
- 描述: 1
- 大小: 16.3 KB
- 大小: 78.8 KB
- 大小: 245.3 KB
分享到:
相关推荐
详细介绍了IOS中ARC的使用方法。一看便懂 。
Automatic Reference Counting (ARC) 是 Swift 语言中的一项重要特性,它自动管理对象的内存生命周期。`IDMPhotoBrowser` 已经全面兼容 ARC,使得开发者无需手动管理内存,降低了出错的可能性,提高了代码的可维护性...
Automatic Reference Counting (ARC)自动管理Block及其捕获的变量的内存。当Block存储在堆上时,ARC会自动增加其引用计数。需要注意的是,避免Block与强引用的循环引用,可能导致内存泄漏。 ### 7. `__block`关键字...
在 Swift 编程语言中,自动引用计数(Automatic Reference Counting,简称 ARC)扮演着至关重要的角色,它负责自动管理内存,确保应用程序的高效运行和稳定性。本文将深入探讨 ARC 的工作原理、如何避免常见的内存...
内存管理:了解ARC(Automatic Reference Counting,自动引用计数)和MRC(Manual Reference Counting,手动引用计数)的工作原理。 Foundation框架:学习Foundation框架中提供的常用类,如NSString、NSArray、...
Swift 语言的自动引用计数(Automatic Reference Counting,简称 ARC)是一种先进的内存管理技术,用于在编译时自动插入引用计数代码,以确保应用程序不会消耗过多内存或导致内存泄漏。本文将详细探讨 ARC 的工作...
通过ARC(Automatic Reference Counting,自动引用计数)来简化内存管理。我们的框架栈则一直基于Cocoa。Objective-C进化支持了块、collection literal和模块,允许现代语言的框架无需深入即可使用。(by gashero)感谢...
所谓ARC是Automatic Reference Counting , 即自动引用计数。ARC是自iOS5引入的。ARC机制的引入是为了简化开发过程的内存管理的。相对于之前的MRC (Manual Reference Counting) , ARC机制显得更加自动化。在使用...
iOS 弹出式菜单 MGTileMenu ,这个控件基于iOS 5开发,使用了ARC(Automatic Reference Counting)...
+ Supports of ARC (Automatic Reference Counting) Delphi compilers + Compatibility with the CrossVCL library. Now you can compile your VCL project into a GUI application for OS X and Linux. + ...
然而,开发者们时常会遇到各种各样的错误,其中“SDK does not contain 'libarclite' at the path”是一个常见的问题,主要与Apple的Automatic Reference Counting (ARC)机制有关。本文将深入探讨这个错误的原因、...
You will also see what ARC (Automatic Reference Counting) is and how it helps in memory management. Finally, you will cover examples on how to use the various tools provided by Xcode to help in ...
在iOS开发中,内存管理是至关重要的,而ARC(Automatic Reference Counting)和非ARC是两种不同的内存管理机制。ARC是Apple引入的一种自动引用计数技术,极大地简化了内存管理,而非ARC则是传统的手动引用计数。这篇...
在iOS 9中,无论是使用ARC(Automatic Reference Counting)还是非ARC,都可以实现单例,但实现方式有所不同。本篇将详细介绍如何在iOS 9环境下,根据项目是否使用ARC来创建和使用单例。 首先,我们了解什么是ARC和...
这个压缩包文件"IOS应用源码之采用ARC-Blocks-GCD封装的网络下载类库.zip"提供了使用ARC(Automatic Reference Counting)、Blocks和GCD(Grand Central Dispatch)技术封装的网络下载类库。这三种技术在iOS开发中...
《iOS 5 ARC完全指南》深入解析了自动引用计数(Automatic Reference Counting,简称ARC)在iOS开发中的应用与工作原理。ARC是苹果在iOS 5中引入的一项技术革新,旨在简化内存管理,减少开发者在手动管理内存时可能...
在iOS开发中,"ARC(Automatic Reference Counting)模式下的下拉刷新和上拉加载更多"是常见的功能,尤其在构建列表或者表格视图时,为了提供更好的用户体验,用户可以轻松地获取更多数据。本文将深入探讨这个主题,...
ARC(自动引用计数,Automatic Reference Counting)是iOS开发中用于管理内存的技术,主要用于替代开发者手动管理对象引用计数。在iOS5引入ARC之后,这一技术得到了广泛的应用。学习ARC对于希望提高iOS开发技能的...
Swift 语言的内存管理主要依赖于自动引用计数(Automatic Reference Counting,简称 ARC)。这是一种编译器自动实现的内存管理机制,它通过跟踪对象的引用计数来自动管理内存。当一个对象的引用计数降至零时,ARC 会...
在 Swift 中,内存管理主要依赖于自动引用计数(Automatic Reference Counting, ARC)。ARC 自动跟踪对象的引用数量,并在适当的时候释放内存。Swift 5.5 引入了新的并发特性,使得编写多线程代码变得更加简单和安全...