ARC(自动引用计数).doc_第1页
ARC(自动引用计数).doc_第2页
ARC(自动引用计数).doc_第3页
ARC(自动引用计数).doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARC(自动引用计数)ARCARC是Automatic Reference Counting(自动引用计数)的缩写,是IOS5一同推出的新特性,但是IOS4.3也支持ARC,只是不能使用weak。使用ARC,不需要再retain、release、autorelease,因为编译器会在合适的地方自动的插入retain、release。ARC的黄金法则1.只要还有一个变量(指针)指向对象,对象就会保持在内存中;2._strong告诉编译器此处添加retain,_strong可以省略。NSString *string = Ray_strong NSString *string = Ray以上两种写法是等同的。3.在ARC中。dealloc方法中不允许调用super deslloc4.在ARC中,不允许使用retainCount属性、打印引用计数5.在ARC中,不允许使用retain、release、autorelease,可以使用copy。strong的使用有两个指针指向了字符串对象RayNSString *firstName = Ray;self.textField.text = firstName;当self.textField.text 指向字符串RayMan”,会先对Ray”对象release;当firstName指向了字符串对象时,先会对原来指向的Ray”对象release。此时Ray”对象就没有一个指针指向它,引用计数也就是0,因此销毁。weak的使用weak修饰的变量不会将对象retain;weak变量指向的对象如果销毁了,则weak所修饰的变量自动变为nil;strong与weak在引用strong修饰的对象时,该对象会被retain;默认所有实例变量和本地变量都是strong类型的指针;(本地变量)weak修饰的对象不会对此对象retain,相当于手动管理的assign。在IOS4.3中ARC不能使用weak,替代者为:_unsafe_unretained,_unsafe_unretained与weak的功能一致,区别在于当指向的对象销毁后,不会将变量设置为nil;这样就有可能调用野指针。weak可以防止循环引用,典型的就是delegate模式代理对象delegate应该设置成weak;property的修饰符总结1.strong:等同于retain,属性成为对象的拥有者2.weak:属性是weak pointer,当对象释放时会自动设置为nil,记住Outlet应该使用weak3. _unsafe_unretained:等同于之前的assign,只有IOS4才能使用4.copy:和之前的copy一样,复制一个对象并创建strong关联5.assign:对象不能使用assign,但是原始(bool、int、float)仍然可以使用。Block在ARC中的内存管理在手动管理内存时,使用如下方式防止循环引用objc view plaincopyprint?1. _block SendViewContronller *this = self; 2. _faceView = FaceScrollView alloc initWithBlock:(NSString *faceName) 3. this.textView.text = test; 4. ; _block SendViewContronller *this = self;_faceView = FaceScrollView alloc initWithBlock:(NSString *faceName)this.textView.text = test;ARC中不能这样使用,以为变量this默认是strong引用,即使标记为_block也仍然为strong类型的引用,这时候_block的唯一功能是允许你修改已捕获的变量(没有_block则变量是只读)objc view plaincopyprint?1. _weak SendViewContronller *weakSelf = self; 2. _faceView = FaceScrollView alloc initWithBlock:(NSString *faceName) 3. _strong SendViewContronller *strongSelf = weakSelf; 4. if(strongSelf != nil) 5. strongSelf.textView.text = test; 6. 7. ; _weak SendViewContronller *weakSelf = self;_faceView = FaceScrollView alloc initWithBlock:(NSString *faceName)_strong SendViewContronller *strongSelf = weakSelf;if(strongSelf != nil)strongSelf.textView.text = test;在ARC环境中使用Block,推荐采用如下代码模板:objc view plaincopyprint?1. _weak id weakSelf = self; 2. block = () 3. _strong id strongSelf = weakSelf; 4. if(strongSelf != nil) 5. /do stuff with strongSelf 6. 7. ; _weak id weakSelf = self;block = ()_strong id strongSelf = weakSelf;if(strongSelf != nil)/do stuff with strongSelf;ARC中使用Toll-Free BridgingToll-Free Bridging,简称TFB。是一种允许某些objc类与其对应的CoreFoundation类之间可以互换使用的机制。比如:NSString与CFString是桥接的,这意味着可以将任意的NSString当作CFString使用,也可以将任意的CFString当作NSString使用。ARC只能对OC对象进行内存管理,CFString桥接成NSString对象之后,此对象的内存管理该如何让管理?在ARC中,CFString桥接成NSString使用_bridge_transFer, _bridge_transFer的作用将其他类型的对象转变成为一个OC对象,由ARC管理;与_bridge_transFer相同作用的还有CFBridgingRelease。_bridge_retained的使用:NSString桥接成CFString用_bridge_retai

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论