• 问题总会出现,不过解决问题的方法也会出现!!!

ARC开启的情况下是否需要对GCD对象dispatch_release ?

iOS开发笔记 小雨 来源:yohunl 403次浏览 已收录 0个评论
对于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
当然了,也可以使用
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 // 6.0sdk之前
dispatch_release(_barrierQueue);
#endif
这里的宏  __IPHONE_OS_VERSION_MIN_REQUIRED  就是我们在工程的设置项里设置的最低部署sdk版本ARC开启的情况下是否需要对GCD对象dispatch_release ?
原因就是  对于最低sdk版本>=ios6.0来说,GCD对象已经纳入了ARC的管理范围,我们就不需要再手工调用 dispatch_release了,否则的话,在sdk<6.0的时候,即使我们开启了ARC,这个宏OS_OBJECT_USE_OBJC 也是没有的,也就是说这个时候,GCD对象还必须得自己管理

如果你部署的最低目标低于 iOS 6.0 or Mac OS X 10.8

你应该自己管理GCD对象,使用(dispatch_retain,dispatch_release),ARC并不会去管理它们
如果你部署的最低目标是 iOS 6.0 or Mac OS X 10.8 或者更高的
ARC已经能够管理GCD对象了,这时候,GCD对象就如同普通的OC对象一样,不应该使用dispatch_retain ordispatch_release

本博客内容既有转载自网络的内容,也有本作者原创内容,仅供学习与交流之用
如有侵权或者错误之处,请及时在下方留言!
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址