iOS ARC简要介绍
2015-09-20 21:23
344 查看
(1)ARC是什么?
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)工具。
我们之前使用Objective-C中内存管理规则时,往往采用下面的准则
生成对象时,使用autorelease
对象代入时,先autorelease后再retain
对象在函数中返回时,使用return [[object retain] autorelease];
而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了。
(2)使用ARC的好处?
看到上面的例子,大家就知道了,以后写Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了
代码的总量变少了,看上去清爽了不少,也节省了劳动力
代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性
(3)ARC的缺点?
记住一堆新的ARC规则 — 关键字及特性等需要一定的学习周期
一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关
(4)ARC基本规则
retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用
dealloc虽然可以被重载,但是不能调用[super dealloc]
由于ARC并不是GC,并需要一些规则让编译器支持代码插入,所以必须清楚清楚了这些规则后,才能写出健壮的代码。
(5)总结
今天,我们看到了基本的ARC使用规则
代码中不能使用retain, release, retain, autorelease
不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
不能使用NSAllocateObject, NSDeallocateObject
不能在C结构体中使用对象指针
id与void *间的如果cast时需要用特定的方法(__bridge关键字)
不能使用NSAutoReleasePool、而需要@autoreleasepool块
不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)
原文地址:http://www.yifeiyang.net/development-of-the-iphone-simply-1/
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
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)工具。
我们之前使用Objective-C中内存管理规则时,往往采用下面的准则
生成对象时,使用autorelease
对象代入时,先autorelease后再retain
对象在函数中返回时,使用return [[object retain] autorelease];
而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了。
(2)使用ARC的好处?
看到上面的例子,大家就知道了,以后写Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了
代码的总量变少了,看上去清爽了不少,也节省了劳动力
代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性
(3)ARC的缺点?
记住一堆新的ARC规则 — 关键字及特性等需要一定的学习周期
一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关
(4)ARC基本规则
retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用
dealloc虽然可以被重载,但是不能调用[super dealloc]
由于ARC并不是GC,并需要一些规则让编译器支持代码插入,所以必须清楚清楚了这些规则后,才能写出健壮的代码。
(5)总结
今天,我们看到了基本的ARC使用规则
代码中不能使用retain, release, retain, autorelease
不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
不能使用NSAllocateObject, NSDeallocateObject
不能在C结构体中使用对象指针
id与void *间的如果cast时需要用特定的方法(__bridge关键字)
不能使用NSAutoReleasePool、而需要@autoreleasepool块
不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)
原文地址:http://www.yifeiyang.net/development-of-the-iphone-simply-1/
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
相关文章推荐
- iOS崩溃堆栈符号化,定位问题分分钟搞定!
- Cordova-iOS自定义插件以及和老版本的差异
- iOS开发小白学习体验-9
- 添加图片水印
- iOS项目开发实战——使用CALayer实现图片的淡入淡出效果
- 关于 iOS 程序的内存分析
- Windows下搭建IOS开发环境(一)
- 蓝懿iOS培训日志16 字典
- iOS项目开发实战——使用CALayer和定时器实现进度条
- iOS-常用技巧
- BitMap类型的图形上下文
- iOS项目开发实战——使用定时器实现循环操作
- SSH连接IOS越狱设备
- Xcode绘制文字及图片
- 裁剪圆形图片的思路及Demo
- 创建imageview的两种方法及区别
- Xcode7升级到Xcode8之后遇到文件冲突
- IOS开发之免费证书+不越狱真机调试
- iOS系统设备具体型号获取
- iOS保存gif动态图