使用OH_NativeWindow_NativeObjectReference()或OH_NativeWindow_GetLastFlushedBufferV2()增加原生对象引用计数后,需及时调用OH_NativeWindow_NativeObjectUnreference()相应地减少引用计数,避免对象无法回收,造成内存泄漏。
// rules.json
{
"rules": {
"cpp": {
"ResourceLeak": [
{
"ruleId": "NativeObjectReference API Not Paired",
"severity": "error",
"skip": false
}
]
}
}
} // 正例代码
#include "native_window/external_window.h"
void IncreaseRefWithDecrease()
{
OHNativeWindow *window;
// 获取 OHNativeWindow...
OH_NativeWindow_NativeObjectReference(window);
// 逻辑操作...
OH_NativeWindow_NativeObjectUnreference(window);
}
void BufferV2WithtDecrease(int *fenceFd, float matrix[16])
{
OHNativeWindow *window;
OHNativeWindowBuffer *buffer;
// 获取 OHNativeWindow...
OH_NativeWindow_GetLastFlushedBufferV2(window, &buffer, fenceFd, matrix);
// 逻辑操作...
OH_NativeWindow_NativeObjectUnreference(buffer);
} // 反例代码
#include "native_window/external_window.h"
void IncreaseRefWithoutDecrease()
{
OHNativeWindow *window;
// 获取 OHNativeWindow...
// 增加引用计数
OH_NativeWindow_NativeObjectReference(window);
// 使用 window...
// 未 UnReference,未对应减少 - 内存泄漏!
} Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)