如题:在对PurgeableMemory对象进行读写访问时,需要注意哪些事项(结合接口说明和示例代码说明)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
如题:在对PurgeableMemory对象进行读写访问时,需要注意哪些事项(结合接口说明和示例代码说明)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
1 回答760 阅读✓ 已解决
1 回答1k 阅读
1 回答866 阅读
1 回答847 阅读
1 回答748 阅读
1 回答725 阅读
1 回答682 阅读
在对PurgeableMemory对象进行读写访问时,需要注意以下事项:
读访问注意事项
OH_PurgeableMemory_BeginRead
接口检查是否可以进行读操作。如示例中if(OH_PurgeableMemory_BeginRead(pPurgmem))
,如果该接口返回true
,表示可以进行读操作;如果返回false
,则可能表示对象当前状态不允许读操作,可能是正在被其他操作占用或者已经被释放等情况。OH_PurgeableMemory_GetContent
获取PurgeableMemory对象的内容,如ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);
,这里将获取到的内容转换为合适的类型(示例中为ReqObj
类型)进行处理。同时,通过OH_PurgeableMemory_ContentSize
获取对象内存数据大小,以便正确处理数据范围。OH_PurgeableMemory_EndRead
接口结束读操作,如OH_PurgeableMemory_EndRead(pPurgmem);
。这会将PurgeableMemory对象的引用计数减1,当引用计数为0时,该对象可以被系统回收,释放内存资源。如果不及时结束读操作,可能会导致内存资源无法及时释放,造成内存浪费。写访问注意事项
OH_PurgeableMemory_BeginWrite
接口检查是否可以进行写操作,如if(OH_PurgeableMemory_BeginWrite(pPurgmem))
。OH_PurgeableMemory_GetContent
获取对象数据,然后进行修改操作。在示例中,先获取数据ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);
,然后声明扩展创建函数的参数(struct AppendParaData apdata = {1};
),并调用OH_PurgeableMemory_AppendModify
更新PurgeableMemory对象重建规则,这里传入了修改函数AddFunc
和参数&apdata
来对数据进行修改(在AddFunc
函数中对数据进行了加法操作)。OH_PurgeableMemory_EndWrite
接口结束写操作,如OH_PurgeableMemory_EndWrite(pPurgmem);
。这同样会调整引用计数,确保内存资源在合适的时候被回收。如果不结束写操作,可能会导致对象一直处于被占用状态,影响内存管理和其他操作对该对象的访问。本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。