盲目依赖ARC带来的主要问题
来源:互联网 发布:桌面软件下载大全 编辑:程序博客网 时间:2024/06/05 11:09
(一)过度使用block之后,无法解决循环引用问题
- 对象有一个Block属性,然而这个Block属性中又引用了对象的其他成员变量,那么就会对这个变量本身产生强引用,变量本身和他自己的Block属性就形成了循环引用。
__weak typeof(self) weakSelf = self;self.completionBlock = ^ { if (weakSelf.success) { weakSelf.success(weakSelf.responseData); }};
- 如果是在非ARC环境下:就将__weak替换为__block,__block变量的含义是在Block中引入一个新的结构体成员变量指向这个__block变量。
__block typeof(self) weakSelf = self;
表示Block不在对self对象retain。
(二)遇到底层Core Foundation 对象,需要自己手工管理它们的引用计数时,需要注意
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。
底层的CoreFoundation对象,大多数以XxxCreateWithXxx的方式创建,例:
//创建一个CFStringRef对象CFStringRef str = CFStringCreateWithCString(kCFAllocatorDefault, "hello world", kCFStringEncodingUTF8);//创建一个CTFontRef对象CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"ArialMT", fontSize, NULL);
对于这些对象的引用计数的修改,要相应地使用CFRetain和CFRelease方法,如下:
//创建一个CTFontRef对象CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"ArialMT", fontSize, NULL);//引用计数加1CFRetain(fontRef);//引用计数减1CFRelease(fontRef);
对于CFRetain和CFRelease两种方法,可以认为它们与OC对象的retain和release方法等价。所以对于底层CoreFoundation对象,我们按照OC引用计数管理办法就行。
在ARC下,我们有时将一个Core Foundation对象转换成OC对象这个时候我们需要告诉编译器,转换过程中的引用计数需要如何调整。这就引入了与bridge相关的关键字,以下时这些关键字的说明:
- __bridge:只做类型转换,不修改相关对象的引用计数,原来的Core Foundation对象在不用时,需要调用CFRelease方法。
- __bridge_retained:类型转换后,将相关对象的引用计数加1,原来的Core Foundation对象在不用时,需要调用CFRelease方法。
- __bridge_transfer:类型转换后,将该对象的引用计数交给ARC管理,Core Foundation对象在不用时,不再需要调用CFRelease方法。
更多细节参考这里
1 0
- 盲目依赖ARC带来的主要问题
- 人类面对问题时的盲目
- IOS学习 非ARC工程转ARC工程以及其内部对应(比较详细的记录的主要问题)
- 个人关于hadoop使用LZO压缩主要步骤以及带来的后续问题和解决办法
- IT创业见闻09-创业初期的盲目乐观带来的后果
- IT创业见闻09-创业初期的盲目乐观带来的后果
- IT创业见闻09-创业初期的盲目乐观带来的后果
- android studio依赖包带来的便捷
- Spring带来的问题
- 脚本带来的问题
- Maven项目主要需要的依赖
- 盲目的爱情
- 盲目的生活
- 盲目的生活
- 盲目的找错
- 学的好盲目
- 盲目的”云”
- kotlin与Spring, 默认类,方法,property为final带来的问题--依赖注入失效,NullPointerException异常
- Android事件分发原理全面解析
- 杭电 2024 C语言合法标识符
- CocoaPods--常见错误
- protobuf 3.0.0 协议头简单说明
- HTML5缓存机制浅析:移动端Web加载性能优化(转)
- 盲目依赖ARC带来的主要问题
- Linux守护进程Shell脚本
- 使用librtmp进行H264与AAC直播
- JavaScript——历史与简介
- 远程调试
- Hot Bath
- qtp的基本使用
- 欢迎使用CSDN-markdown编辑器
- 2016/9/28 星期3