转向ARC的说明.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

me54545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档