gpt4 book ai didi

c++ - Objective-C 到 C++ 字符串转换导致内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:38 25 4
gpt4 key购买 nike

我正在调用 Controller 字符串数据成员并使用 UTF8String 方法将 NSString 对象转换为 C++ 字符串对象,这导致了内存泄漏。该调用在核心音频 RenderTone 函数内进行,如下所示:

InstrumentGridViewController *viewController = (InstrumentGridViewController *)inRefCon;
string cppTrackName = [viewController->trackName UTF8String];

虽然代码位于 for 循环中,但它会导致相当大的内存泄漏。任何想法为什么?我必须进行转换,因为我正在使用 cppTrackName 变量进行 c++ 函数调用。我也试过这个:string cppTrackName = "synthTrack #1"; 这工作正常,不会造成任何泄漏,但显然我真的需要从我的 Controller 读取值。

这是控制台中的错误(不断重复):

objc[6352]: Object 0x68c3b60 of class __NSCFData autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug

最佳答案

更新

现在我已经看到消息了:

-[NSString UTF8String] 的实现可以自由假设在生成消息的线程上存在自动释放池。

正在从辅助(渲染)线程调用您的音频回调。显然,在您向字符串发送消息时,此线程上不存在自动释放池,因此出现“无自动释放池”控制台消息。

在典型情况下,您会明确地创建一个自动释放池。 但是,这是渲染线程。如果它是一个实时音频线程,你不应该锁定(包括堆分配)或者甚至使用 objc 消息传递(因为它可以锁定,而 objc 消息传递不保证消息发送的最长时间)。 ObjC API(实际上)在实时音频渲染上下文中没有位置。

关于c++ - Objective-C 到 C++ 字符串转换导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com