使用GCD时的内存管理问题

Effective Objective-C 2.0 读书笔记 第 1 章 熟悉 Objective-C 第 2 章 对象消息运行时 第 3 章 接口和 API 设计 第 4 章 协议与分类 第 5 章 内存管理 循环引用 普通的两个变量互相引用 Block 循环引用 NSTimer 悬挂指针 持有释放不匹配 performselector CoreFoundation - Foundation try catch 其他 autoreleasepool blo 阅读详情
对于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版本


原因就是  对于最低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 
【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南 阅读详情

相关推荐

python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力

Python的GUI简易界面设计案例测测你的反应力作为初次接触代码编程的你,是不是觉得Python程序除了“码”就是“字”即使是有趣的程序除了烧烧自己的脑,也吸引不到更多人的兴趣,用户体验值接近于0?那你可冤枉了Python,他可是人工智能界的编程语言大咖。今天这个游戏设计就先带领大家,简单体验一下,如何让Python程序图形化。一起来吧!设计我们的小游戏游戏设计思路:电脑随机出...

weixin_34214135的博客 1872

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

对于dispatch_queue_t 对象来说,我们应该这么写 #if OS_OBJECT_USE_OBJC @property (strong, nonatomic) dispatch_queue_t barrierQueue; #else @property (assign, nonatomic) dispatch_queue_t barrierQueue; #endif

yohunl的专栏 2万+

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4779

关于 文件的编译选项 OS_OBJECT_USE_OBJC

首先看下 OS_OBJECT_USE_OBJC个宏定义常见用处 出现这段代码的原因是 GCD中的对象在6.0之前是不参与ARC的,而6.0之后 在ARC下使用GCD也不用关心释放问题 在之后的SDK中 都是定义了OS_OBJECT_USE_OBJC这个宏的 如下为 9.1 sdk中 系统源码截图: 所以我们可以直接这么写: @property (noatomic,strong) d...

weixin_30653097的博客 360

深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南

本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。

weixin_27310417的博客 1165

Rocky Linux 8.10下用cephadm快速搭建Ceph集群(附华为云镜像源配置)

本文详细介绍了在Rocky Linux 8.10操作系统上使用cephadm快速部署Ceph集群的实战指南,包括环境准备、系统配置、华为云镜像源优化、集群初始化及节点扩展等关键步骤。通过配置华为云镜像源,显著提升部署效率,适合企业级存储解决方案的需求。

weixin_30839881的博客 148

dispatch_release & dispatch_retain

sdk6.0以前不管arc或者none-arc都需要手动retain和release GCD 对象。 sdk6.0以后GCD对象可以有arc处理。不需要手动retain和release。 #if !OS_OBJECT_USE_OBJC //这个宏是在sdk6.0之后才有的,如果是之前的,则OS_OBJECT_USE_OBJC为0 dispatch_release(gcd_obj);...

weixin_30772261的博客 229

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 508

AFNetworking Property with 'retain (or strong)' attribute must be of object type

由于sdk低于6.0时,dispatch_queue_tARC没有托管,出现提示错误,修改为: #if OS_OBJECT_USE_OBJC @property (nonatomic, strong) dispatch_queue_t completionQueue; #else @property (nonatomic, assign) dispatch_queue_...

weixin_30651273的博客 163

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

最小可分辨对比度(MRC)

最小可分辨对比度的测试方法如下: 1)选择对比度测试靶板,一般有100%,50%,33.77%,15%,5%。 2)调整照度,确保能够清晰观测到图像中的靶标; 3)利用USAF1951分辨率靶观察找到能够分辨出的靶标。 1951 USAF分辨力测试图目前仍广泛地应用于测试光学成像系统(如显微镜和相机)的分辨能力。这种图案包括几组由三条短线构成组合,短线的尺寸从大到小。成像系统无法辩明的...

6272

SDWebImage源码阅读(一)SDWebImageCompat

  SDWebImageCompat 是SDWebImage 的配置文件,里面利用条件编译对Apple 的各个平台进行了兼容。可以看到SDWebImage 支持当前的MAC/iOS/TV/WATCH 平台。   对各个平台的兼容性对框架开发意义重大。当前我们只是针对iOS 平台进行阅读理解,但是我们应该知道,当我们在别的Apple 的平台开发时,我们依然可以亲切并熟练的使用SDWebImage。...

weixin_30732825的博客 192

AutoSAR系列讲解(实践篇)7.3-AppL在Dev中的配置(下)

接着讲解Dev中剩下的几个定义项

雪云飞星的博客 1万+

GCD线程与runloop中添加timer的见解

GCD与NSTimer 很多时候,我们需要在自己的项目中重复、延迟、周期性的执行某一项任务,也可能在某一个时间点取消掉自己已经延迟或重复的任务 显而易见,延迟操作我们最经常使用的是GCD的dispatch_after,但延迟操作一共有三种方法,今天就简单说说其中的区别 1.NSObject的对象方法: - (void)performSelector:(SEL)aSelector w

dragongd的博客 2181

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

weakSelf GCD

dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf updateView4SwiperSuccess:result]; });上面这段代码,在 ARC有问题但是不会引起,因为weakSelf 释放后会被置为nil,OC语法向一个空的对象发送消息是不会崩溃的,虽然不会崩溃,但是原有逻...

weixin_33860528的博客 532

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

GCD 线程处理

GCD一。GCD概述二。GCD的常规使用方法三。GCD大杀器----异步下载图片并刷新UI。四。GCD+Block五一次性执行:六延迟执行七 dispatch_time_t与秒的对应关系一。GCD概述Grand宏大的 Central中央 Dispatch调度是处理多线程的,类似于NSThread,但是比N...

weixin_30699443的博客 157

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS内存管理

小码哥底层班内存管理系列

cai3804007的博客 150

2018京东iOS秋招笔试题复盘:Runtime、GCD与内存管理

在iOS开发中,内存管理、多线程与运行时机制是决定应用性能与稳定性的基石。理解Objective-C的消息发送流程、KVO动态子类原理、Block循环引用以及GCD的队列与栅栏语义,是排查线上问题、优化复杂交互体验的关键能力。这些底层技术不仅支撑着日常业务功能的实现,更在架构设计、性能优化等工程场景中发挥着核心价值。本文以京东iOS秋招笔试题为线索,系统梳理了从消息转发、线程安全、UI事件响应链到TableView复用、HTTPS握手和签名工程化等高频考点,并结合典型代码示例与踩坑经验,帮助开发者构建从原理

weixin_31102231的博客 254

Block与GCD

“块”的概念 块的基础知识 块与函数类似,区别为它直接被定义在另一个函数里,和定义它的那个函数共享同一个范围的内容。块用“^”符号来表示,后边跟着一对花括号,括号里面是块的实现代码。 ^{ //Block } 块的本质是一个值,而且有其相关类型。与int、float或OC对象一样,也可以把块赋值给变量,然后像使用其他变量那样使用它。块的语法与函数指针近似: //块的语法结构 return_type (^block_name)(parameters) //块的简单使用方法 //定义块 int

LANGJ1的博客 1607

多线程(一)之 NSThread、GCD

---恢复内容开始--- pthread小结(了解) 在 C 语言中,没有对象的概念,对象是以结构体的方式来实现的 通常,在 C 语言框架中,对象类型以_t/Ref结尾,而且声明时不需要使用* C 语言中的void *和 OC 中的id是等价的 内存管理 在 OC 中,如果是ARC开发,编译器会在编译时,根据代码结构,自动添加retain/release/a...

weixin_30607029的博客 217

初识iOS NSTimer 循环引用不释放问题

原文转自 :http://www.codecate.com/code/?p=77 最近开发遇到NSTimer Target 造成循环引用问题,不释放,以下是解决方案。 stackoverflow上的一个解决方案 http://stackoverflow.com/questions/16821736/weak-reference-to-nstimer-target-to-pr...

adnnsyv71881的博客 108

c语言多线程面试题,iOS面试题--网络多线程

一、多线程的底层实现?1>线程:Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程2>开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的3>开发中实现多线程的方案:(1)C语言的POSIX接口:#include(2)OC的NSTread(3) C语言的CGD接口(性能最好,代码更简洁)(4) OC...

weixin_33756596的博客 302

iOS 多线程

ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。 1、  NSThread:调用方法如下:如果需要函数参数的话,可以通过Object传递。1.1:[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil]; 1.2:NSThread*

thinkitthree的专栏 418

IOS 多线程的一些总结

IOS 多线程 有三种主要方法 (1)NSThread (2)NSOperation (3)GCD 下面简单介绍这三个方法 1.NSThread 调用方法如下: 如函数需要输入参数,可从object传进去。 (1) [NSThread detachNewThreadSelector:@selector(threadI...

weixin_30819163的博客 75

关于IOS多线程的简单总结

IOS多线程有三种主要方法 (1)NSThread (2)NSOperation (3)GCD 下面简单介绍这三个方法  1.NSThread 调用方法如下:  如函数需要输入参数,可从object传进去。     (1) [NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarg

code life 347

招聘一个靠谱的iOS

1. 风格纠错题 修改方法有很多种,现给出一种做示例: 最终改为: 下面对具体修改的地方, 2. 什么情况使用 weak 关键字,相比 assign 有什么不同? 什么情况使用 weak 关键字? 1)在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决,比如:delegate代理属性 2)自身已经对它进行一次强引用,没有必要再强引用...

Watchmen0320的博客 185
上一篇: 关于GCD(详细)
下一篇: 关于block的那些事
Allen_iOS
博客等级 码龄12年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值