使用GCD时的内存管理问题
来源:互联网 发布:奥地利经济学派 知乎 编辑:程序博客网 时间:2024/05/21 17:08
对于dispatch_queue_t 对象来说,我们应该这么写
#if OS_OBJECT_USE_OBJC
@property (strong, nonatomic) dispatch_queue_t barrierQueue;#else
@property (assign, nonatomic) dispatch_queue_t barrierQueue;
#endif
在dealloc方法中应该加上
#if !OS_OBJECT_USE_OBJC //这个宏是在sdk6.0之后才有的,如果是之前的,则OS_OBJECT_USE_OBJC为0
dispatch_release(_barrierQueue);
#endif
dispatch_release(_barrierQueue);
#endif
当然了,也可以使用
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 // 6.0sdk之前dispatch_release(_barrierQueue);
#endif
这里的宏 __IPHONE_OS_VERSION_MIN_REQUIRED 就是我们在工程的设置项里设置的最低部署sdk版本
原因就是 对于最低sdk版本>=ios6.0来说,GCD对象已经纳入了ARC的管理范围,我们就不需要再手工调用 dispatch_release了,否则的话,在sdk<6.0的时候,即使我们开启了ARC,这个宏OS_OBJECT_USE_OBJC 也是没有的,也就是说这个时候,GCD对象还必须得自己管理
你应该自己管理GCD对象,使用(dispatch_retain,dispatch_release),ARC并不会去管理它们
如果你部署的最低目标是 iOS 6.0 or Mac OS X 10.8 或者更高的
ARC已经能够管理GCD对象了,这时候,GCD对象就如同普通的OC对象一样,不应该使用dispatch_retain ordispatch_release
0 0
- 使用GCD时的内存管理问题
- 使用SDWebImage时的内存管理问题
- GCD 集中与iOS的多核编程和内存管理
- c++中使用vector可能会产生的内存管理问题
- [iOS开发]使用GCD遇到的问题
- 一个奇怪的GCD内存不释放的问题
- 内存的问题和管理
- 内存管理问题的总结
- string的内存管理问题
- 内存管理的基本问题
- NSString的内存管理问题
- ios gcd 内存释放问题
- 内存使用的管理方式
- 根据Facebook内存的管理使用,浅谈在iOS上自动检测内存泄漏问题
- iOS与OS多线程和内存管理---GCD的API详解
- 使用HGE时管理资源的问题..
- 使用SSM时的对象管理问题
- 一个动态链接的内存管理问题
- 开始学习——爬取微博页面的html
- LCD设备驱动程序
- Android中View绘制流程以及invalidate()等相关方法分析 (1)
- HttpQuery httpClient with cookie sessionID
- 奇怪的排序____(Bin 神 OJ)
- 使用GCD时的内存管理问题
- 如何对从WIFI设备上获取的信息进行整理,要从哪些方面考虑,信息已解析好了。
- 测试代码修饰功能
- Palindrome Number
- CLLocationManager地理定位
- JPA总结——映射持久化对象(Entity)
- centos 之7zip
- 如何在没有root权限下安装Nginx
- Longest Common Prefix