[深入分析BREW机制]:BREW接口的引用计数机制

Mac M2上brew install报错与超时问题全解析:从No remote ‘origin‘到国内镜像优化 本文详细解析了Mac M2芯片上使用Homebrew时常见的'No remote 'origin''报错与超时问题,提供了从Git安全配置到国内镜像优化的完整解决方案。针对M2的ARM架构特性,特别介绍了如何强制使用bottle安装、处理依赖冲突等进阶技巧,帮助开发者高效管理软件包。 阅读详情

 BREW接口的引用计数机制
 ——目录——
 引言
 1、new函数规则一
 2、new函数规则二
 3、AddRef函数规则
 4、Release函数规则
 5、接口指针作为函数入参规则一
 6、接口指针作为函数入参规则二
 7、接口指针获取规则
 结语

引言
所有BREW接口的实现结构体里都有一个成员uint32 m_nRef,这就是常说的引用计数值,而引用计数机制就是通过管理m_nRef来管理接口的生命期,接口的生命期就是接口在内存中所呆的时间。
BREW的引用计数机制是符合com规范的,或者说按照com规范来理解和使用BREW的引用计数机制是安全的。
针对BREW的具体应用环境,我总结出如下几条使用规则:
1、new函数规则一
在new函数里将接口本身的数据成员m_nRef初始化为1。
(我把接口现实里的创建接口的函数称为new函数,因为它的函数名中习惯上都会带有new字样,new函数在AEEClsCreateInstance函数里被调用,赋有分配接口实例的内存和初始化接口实例的数据的功能。)
2、new函数规则二
除了m_nRef是接口的必备数据成员外,m_pIShell和m_pIModule也应成为必备。m_pIShell、m_pIModule由new函数接收AEEClsCreateInstance函数的对应入参(IShell *)、(IModule *)来赋值。除了赋值之外,new函数还应调用IShell和IModule接口的AddRef函数:
IShell_AddRef(pme->m_pIShell);
IModule_AddRef(pme->m_pIModule);
3、AddRef函数规则
AddRef的作用就是将接口自身的m_nRef加1,然后将m_nRef作为返回值。
4、Release函数规则
Release函数的作用与AddRef相反,将m_nRef减1,如果减完之后,m_nRef的值等于0,则要释放接口实例所占内存,千万忘的一点是如果实例结构体里有指针成员,则要先释放这些指针成员所指向的内存,比如,在new函数里调用了m_pIShell和m_pIModule的AddRef函数,在这里就要调用它们的Release函数。像m_pIShell属于全局性的成员,生命期与接口实例同,在接口的整个生命期中,供给接口的各个接口函数使用。
5、接口指针作为函数入参规则一
如果能确定函数A都是在其它函数的内部被调用,这种情况下,A的生命期一般都嵌套在调用者的生命期里。如果A使用了接口指针入参,那么在函数A的开头和结尾都不需要调用此接口指针的AddRef和Release函数,也就是说直接使用就行了,不必担心接口指针的分配与释放问题。
6、接口指针作为函数入参规则二
如果函数A属于回调函数供回调使用,这种情况下,A的生命期与调用者的生命期是异步的,如果函数A的参数中有接口指针入参,为了保证A在使用这个调用者传入的接口指针时,此接口指针还是有效的,就需要调用者只创建和传入此接口指针而不用释放。这样函数A的工作就是在使用接口指针前不要调用AddRef,但在使用完之后一定要调用此接口指针的Release函数。
7、接口指针获取规则
获取一个接口指针IImageCtl *pa的方法有三种:1)直接创建,IShell_CreateInstance(....&pa); 2)通过函数B的返回值或输出参数得到,3)直接将另一个IImageCtl *pb赋给它,即pa = pb形式。对于第1)、2)种获取方法,不需调用pa的AddRef函数,但要在使用完后调用Release函数;对于第3)种获取方法,原则上要调用pa的AddRef,并且在使用完后要调用pa的Release,但实际上往往可以省去这一对调用。具体为:如果pa的生命期嵌套在pb的生命期里,则可省,典型的例子是:pa是函数的入参,调用者将pb传给此入参,而pb的释放在被调函数返回之后进行,实际就是规则5。如果pa是一个全局性的变量,比如一个applet结构体的成员、一个接口结构体的成员,赋值一次要供applet或接口的所有函数使用,这时pa被赋值之后要调用AddRef,而Release要在applet的free函数或接口的release函数里调用。如果pa的生命期与pb是异步的,则也要调用,实际上规则6说的就是这种情况。

结语
引用计数看似很深奥,其实大多数情况下不必太关注,除了上面的规则之外,要记住下面几个原则会让你省去很多麻烦:1)看见CreateInstance,别忘Release;2)少用AddRef,用了AddRef,也别忘Release;3)AddRef和Release的返回值不要用;
最后具个例子帮你应用上面的规则:BREW的有些接口指针的获取不是直接调用CreateInstance,而是通过别的接口函数来得到,如IDatabase指针、IIFile指针、IImage指针等等,获取这些接口指针后,不必调用它们的AddRef函数,但是在使用完之后仍要调用它们的Release函数,这属于规则7里所说的第三者2)种获取接口指针的方法。

深入理解Brew播放器源码及音频处理技术 本文还有配套的精品资源,点击获取 简介:Brew播放器是一个专为BREW平台设计的音频播放软件,其源码对于学习BREW应用开发至关重要。本文详尽解读了Brew播放器源码的核心概念、关键技术及实现原理,包括音频解码、内存管理、音频流控制、用户界面设计、事件处理和电源管理。通过深入分析Brew播放器源码,开发者可以掌握在BREW平台上进行音频处理、用户界面设计和事件处理等多方面... 阅读详情

相关推荐

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态

1. 手动计算关节速度,其中timestep为仿真步长。2. 使用data.qvel直接取得关节速度。

darcsdn 768

引用计数和AddRef、Release

          AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。为正确的使用引用计数,需要了解一下三条规则:(1)       在返回之前

3651

广工计组实验f2一位全加器

一位全加器实验

weixin_63692154的博客 2847

COM组件的AddRef和Release()方法使用

AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。   为正确的使用引用计数,需要了解一下三条规则:   (1)在返回之前调用AddRef。对于哪些

yangshuangtao的专栏 6001

5.FxBlue跟单常见问题

fxblue喊单ea和fxblue跟单会在mt4/mt5客户端ea栏目里记录fxblue在跟单复制订单过程中的全面记录。在遇到问题时,我们首先要恢复默认参数尝试,然后再到ea栏找报错提示。 ​ 需要注意的是,是EA选项卡,而不是日志选项卡。 此外,您可以在 MT4/5 软件终端面板的"EA"选项卡中查看跟单记录,您可以通过右键单击 Experts 日志并从 MT4/5 的弹出菜单中选择“打开”来打开每日日志文件以及历史文件。 5.1 No “heartbeat” received 没有收到“心跳” 接收方

weixin_44406393的博客 1874

从零构建:Trinamic API在STM32上的深度移植与TMC-IDE通信实战

本文详细介绍了如何从零开始在STM32平台上深度移植Trinamic API,并实现与TMC-IDE工具的稳定通信。内容涵盖SPI底层驱动定制、寄存器配置、高级功能实现及调试技巧,重点解析了TMC5160芯片的集成实践,帮助开发者构建可靠的嵌入式运动控制系统。

w1x2y3的博客 254

MySql中insert,group by,order by语句优化

我们在MySql中经常进行数据的增删改查操作,这里和大家一起分享一些常用的sql优化技巧。 首先我们来说一下ORDER BY的优化。 ORDER BY 是我们在sql中进行排序的语句,首先我们使用ORDER BY 语句的时候,如果可以按照有序索引顺序扫描来返回有序数据的话,那么这种方式是最快的,比如说我们有一张表A,其主键为ID,ID自增,并且存在主键索引,那么我们进行如下查询:select

千林的博客 1878

FPGA串口通信----uart(一)

通过PLL锁相环IP的使用,可以输入时钟进行分频,倍频,也可以产生多路时钟输出信号。外部提供晶振的原因:①Fpga电路大多数需要时序分析②晶振在Fpga内部占空间大,所以放置于外部PCB板上Uart异步传输速率不能很快的原因:考虑到工程实际问题,假如时钟周期大(传输速率慢的话),采取到数据电平变化的边沿时刻的概率会小很多,这样数据也很准确,通常uart适用于2M.

mvpkuku的博客 970

[深入分析BREW机制]:动手写BREW扩展接口

动手写BREW扩展接口 ——目录—— 引言 1、写扩展接口最好要熟悉的几个宏 2、示例接口IStringParse 3、接口解析  3.1 头文件解析  3.2 .c文件解析  3.3接口实例的创建  3.4接口的实现函数  3.5接口的释放 结语引言 扩展接口在BREW开发中很重要,使你的程序更健壮,维护工作更高效。一个程序应尽力将业务处理分离成功能类接口,这使得业务的实现和维护,与对业务的

chinesecoolman的专栏 1918

永磁同步电机自抗扰控制ADRC(位置环/速度环控制器)Matlab/Simulink仿真(S-Function)

ESO是ADRC的核心,其作用是跟踪被控对象的输出,同时给出受控对象的各阶状态变量以及系统总扰动的实时估计,将其补偿到控制器中,实现动态补偿线性化。NLSEF采用非线性函数把TD产生的跟踪及微分信号与ESO给出的状态变量估计值之间的误差进行非线性组合得到初级控制量,然后同总扰动的补偿量一起生成最终的控制信号。自抗扰控制(ADRC)技术的核心思想是将简单的积分串联型视为标准模型,把系统模型中不同于标准型的部分和外部干扰之和视为总扰动,并将其扩张为一个新的状态。看作系统内外部扰动之和。令一个高阶状态变量为。

m0_66341377的博客 7615

LED背光驱动电路解析:从MP3394芯片到液晶屏灯管控制

本文深入解析了以MP3394芯片为核心的LED背光驱动电路工作原理。从升压电路的能量转换到多路LED的均流控制,详细阐述了其作为液晶屏背光“大脑”的关键作用,并提供了黑屏、闪屏、亮度不均等常见故障的实战检修思路与排查方法。

agile9scrum的博客 824

[深入分析BREW机制]:BREW的类机制

 BREW的类机制 ——目录—— 引言 1、BREW类声明透析 2、BREW类实现透析 3、BREW类的创建过程 结语引言 Brew开发包由两部分组成:标准接口、助手函数。我们可以利用brew sdk开发第三方应用,也可以开发新的接口,第三方接口称为扩展接口(extension interface). 所有的标准接口、扩展接口以及brew应用的实现机制都是一样的,我称之为Brew类机制,所有的

chinesecoolman的专栏 1494

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1827

[深入分析BREW机制]:BREW接口的继承特性应用

 BREW接口的继承特性应用 ——目录—— 引言 1、接口继承 2、实现继承 结语引言 这里所说的BREW接口的继承特性,也就是BREW类的继承特性。一个BREW接口包括两部分,第一部分是接口的定义和接口函数宏的定义;第二部分是接口函数的实现。我往往把第一部分直接称为接口,所以“接口”二字有时表示的是一个独立完整的接口,有时指的是完整接口的第一部分。 从BREWapi里提供的接口来看,用到了两

chinesecoolman的专栏 1107

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[深入分析BREW机制]:Mod相关概念解析

 BREW MOD相关概念解析 目录 1、Mod与Applet、接口的关系 2、Mod的唯一标识 3、Applet、接口的唯一标识 4、Mod的实体组成 5、Mod的加载和启动  5.1 加载Mod  5.2 启动Mod 6、在simulator中运行动态Mod1、Mod与Applet、接口的关系本文之前谈到的都是Applet和接口,实际上BREW的运行单元是Mod,而Applet、接口只是M

chinesecoolman的专栏 2199

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[深入分析BREW机制]:applet的类特征

BREW applet的类特征 ——目录—— 引言 1、appgun创建过程简述 2、appgun为什么是一个类 3、appgun的类实例结构体解析 结语引言本篇创建一个applet,applet的名字叫gun,简称appgun。通过分析appgun的创建过程来揭示appgun的类本质。1、appgun创建过程简述1)首先定义一个Cappgun结构体,里面定义appgun的所有数据成员:t

chinesecoolman的专栏 973

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

BREW平台主要技术的分析与总结

2003年,美国高通公司在中国推出了BREW平台,在中国获得了快速的发展和应用。时间虽然不短,但是由于高通公司的种种约束以及BREW平台本身的诸多限制,使得许多开发人员对在BREW平台下进行开发不得要领。本文深入分析了BREW平台的主要技术以及实现机制,包括模块加载机制、事件处理机制、接口机制和回调机制,以期对BREW平台有深入透彻的理解,并对BREW的主要技术进行了总结。 (此文为毕设时写的小论文,谈不上原创,但还是有一定参考价值。)

feng_zai的专栏 1735

[转]深入BREW消息处理机制

 消息处理机制,即event driven和传统的编程机制不同,如dos,unix下的c编程,他没有main loop,程序的流程不是顺序执行的。有过window编程经历的读者都会清楚这种机制。Windows下消息处理机制:当在交互中进行一个action(or signal, or input, etc),window产生相应的event,通过window的event dispatch机制,相应的

chenyonghua521的专栏 304

BREW & J2ME:在差别中联合

[出自: http://expert.imobile.com.cn]摘要 本系列面向那些习惯使用J2ME的手机开发者,或者那些对更轻便和更有效的代码生成感兴趣的BREW开发者。主要是受Java GUI模型的启发,当前的BREW_J2ME 框架可以处理J2ME中当作“高级别接口”的东西。关于如何提供确切的J2ME匹配-推理不在本文讨论范围之内,本文只是提供这两个领域的概述。 首先我将快速讨论BR

mobilechannel的专栏 5674

android viedio控件,基于brew平台的手机播放器应用的设计与实现-电子与通信工程专业论文.docx...

基于brew平台的手机播放器应用的设计与实现-电子与通信工程专业论文西安电子科技大学硕士学位论文基于BREW平台的手机播放器应用的设计与实现姓名:韩宏娜申请学位级别:硕士专业:电子与通信工程指导教师:任光亮;李涛201112摘要播放器应用是手机上的重要娱乐模块,目前已经成为手机中的必备应用之一。摘要播放器应用是手机上的重要娱乐模块,目前已经成为手机中的必备应用之一。 传统的基于BREW平台手机应用...

weixin_31924507的博客 439

在BREW程序中调用另一个mod的分析

 近日读到这样一段程序。可以在程序运行时调用另一个mod文件并执行。这样可以做到应用自升级,压缩程序文件等实用的功能。  要想理解这点,先看一下正常的BREW程序加载过程。 BREW程序的入口,即相当于c程序的main,是位于AEEModGen.c中的AEEMod_Load函数。这可以从mak文件的连接选项中看出来。 LINK_ORDER = -first AEEMod_Loa

435

Bluefin工具箱中brew安装失败问题的分析与解决方案

Bluefin工具箱中brew安装失败问题的分析与解决方案 问题现象 在使用Bluefin工具箱的bluefin-cli容器时,用户尝试通过Homebrew安装软件包时遇到错误。典型错误信息显示为"cp: No such file or directory (os error 2)",表明在文件复制过程中出现了问题。这个问题自2024年7月首次报告以来,持续影响了多个用户的使用...

gitblog_07802的博客 355
上一篇: [深入分析BREW机制]:BREW接口的继承特性应用
下一篇: [深入分析BREW机制]:Mod相关概念解析
chinesecoolman
博客等级 码龄18年 6粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值