- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
转向ARC的说明
ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系,而不用考虑对象的retain和release。
?
概要
ARC在编译时期添加代码,保证对象可用。概念上说,ARC遵循手动引用计数的规则,替开发者,在编译时期添加合适的代码。
?
Xcode4.2(Mac OS 10.6、10.7和iOS4和iOS5)支持ARC,弱引用在10.6和iOS4上不支持。
?
Xcode提供了一个工具:自动机械得转化为ARC(比如移除retain和release的调用),并帮助开发者解决不能自动迁移的问题。迁移工具将所有文件转化成ARC,开发者也可以对单个文件实施ARC,方便于开发者对某些文件手动引用计数。
?
ARC概要
ARC评估了对象的生命周期,并自动插入合适的代码在编译时期,从而代替开发者不得不考虑何时需要retain、release和autolease。同编译器替开发者,生成合适的dealloc方法。一般来说,当开发者需要在手动引用计数和ARC配合使用时候,使用传统ARC的Cocoa命名惯例是很重要的。
?
一个正确的完整的Person类如下:
?
@interface?Person?:?NSObject???
@property?NSString?*firstName;???
@property?NSString?*lastName;???
@property?NSNumber?*yearOfBirth;???
@property?Person?*spouse;???
@end???
????
@implementation?Person???
@end???
?
对象的属性默认是strong;strong属性在 “ARC Introduces New Lifetime Qualifiers.”有描述
?
-?(void)contrived?{???
????Person?*aPerson?=?[[Person?alloc]?init];???
????[aPerson?setFirstName:@William];???
????[aPerson?setLastName:@Dudney];???
????[aPerson?setYearOfBirth:[[NSNumber?alloc]?initWithInteger:2011]];???
????NSLog(@aPerson:?%@,?aPerson);???
}???
?
ARC掌管了内存管理,所以Person和NSNumber不会泄露。
?
开发者还可以安全得实现Person类的方法takeLastNameFrom:
?
-?(void)takeLastNameFrom:(Person?*)person?{???
????NSString?*oldLastname?=?[self?lastName];???
????[self?setLastName:[person?lastName]];???
????NSLog(@Lastname?changed?from?%@?to?%@,?oldLastname,?[self?lastName]);???
}???
?
ARC确保oldLastName在NSLog之前不会被销毁。
?
ARC执行了新的规则
ARC执行了一些新的规则,是其他编译模式没有的。这个规则是:致力于提供一个安全可靠的内存管理模式。在某些情况下,他们只是执行最佳实践;某些情况,他们简化你的代码或者处理那没明显的不需要内存问题。如果你违反这些规则,立即得到一个编译错误,而不会在运行显示一个微妙的bug。
?
●?开发者不能显示调用dealloc;不能实现和调用retain、release、retainCount和autorelease。
禁止使用@selector(retain),@selector(release)等等。
开发者仍可以实现dealloc方法,如果你想管理资源而不是变量。开发者不能release变量,但是可以调用[systemClassInstance setDelegate:nil]在系统类上,或者其他不是用ARC编译的代码上。
ARC中自定义的dealloc方法,不需要调用[super dealloc](其实这样做就会导致编译错误),编译器会强制自动链接到父类。
开发者仍可以对Core Foundation-style对象,使用CFRetain,CFRelease和其他相关方法。
?
● 不能使用NSAllocateObject或者NSDeallocateObject。开发者创建对象使用alloc,运行时环境负责销毁对象。
?
● 在C数据结构中,不能使用对象指针。可以使用OC类来代替C的stru
文档评论(0)