- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer];
CMBlockBufferRef buffer = CMSampleBufferGetDataBuffer(sampleBuffer);
CMBlockBufferAppendBufferReference(_sem == 0 ? _buffer0 : _buffer1, buffer, 0, 0, 0);
//if(sampleBuffer)
// CFRelease(sampleBuffer);
为什么这会在第一行导致内存泄漏(至少 Leaks 是这么建议的)?我有我的 assetOutput.shouldAlwaysCopySampleOutput = NO。这是我对情况的理解:
CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer];
此行将创建对 assetOutput 中的示例缓冲区的引用。
CMBlockBufferRef buffer = CMSampleBufferGetDataBuffer(sampleBuffer);
此行将从 CMSampleBuffer 获取 CMBlockBuffer 但不会分配新缓冲区,在这种情况下的 Get 方法意味着它是一个临时(自动释放)缓冲区
CMBlockBufferAppendBufferReference(_sem == 0 ? _buffer0 : _buffer1, buffer, 0, 0, 0);
此行会将上面创建的 CMBlockBuffer 的引用附加到选定的全局范围缓冲区。它不会复制任何内存块。
因此,在这三行中,我没有分配任何内存,也没有复制任何内存,它们都是引用。我不明白泄漏是从哪里来的。我尝试添加注释掉的行,但它似乎仍然泄漏(尽管次数减少了)
最佳答案
alwaysCopiesSampleData
与内存管理无关。这仅与您是在原始样本缓冲区还是原始样本的克隆上涂鸦有关。它的名字有点遗憾。
copyNextSampleBuffer
遵循创建规则,因此,在您使用完后应该将其释放。它创建一个保留计数至少为 1 的引用。
创建规则:
Apple 的文档链接往往会更改,但如果上面的链接失效,只需谷歌“The Create Rule”
关于iphone - CMSampleBufferRef 上的 CFRelease - 为什么我需要调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473094/
以下代码导致我的 C++ 应用程序崩溃: CFMutableDictionaryRef property_dictionary = CFDictionaryCreateMutable( kCFAllo
这让我大吃一惊。我从 iPod 库中读取音频以分析音频样本,我可以做我想做的事,缓冲区总是泄漏,我收到低内存警告并且应用程序被终止。我尝试了所有建议但没有成功。下面的代码被合并到一个静态库中并且读取音
我正在学习 iOS 编程。 我编写了关联地址的代码。 有很多方法。喜欢 我正在划分一个小组。 这是组1 ABAddressBookCreate(); ABRecordCopyCompositeName
我有一个代码行,我在下面提到的行中一直崩溃。 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error
这个问题在这里已经有了答案: When do I use CFRelease? (2 个答案) 关闭 9 年前。
我有清除设备中地址簿的方法。方法如下。 -(void) clearAdressBook { ABAddressBookRef addrBook=ABAddressBookCreate();
我们的一位测试人员报告了以下崩溃: 0 APP_NAME_WAS_HERE 0x00074892 testflight_backtrace + 158 1 APP_NAME_WAS_HERE 0x00
以下是来自 Omni frameworks 的代码片段: CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL
我以两种方式拦截 CGEventRef: 返回值 NULL 以终止事件 通过 CGEventCreateKeyboardEvent() 为事件分配一个新的 CGEventRef Xcode 的分析器告
我的代码有一个非常奇怪的错误。事实上,根本没有错误,只是调试器以“程序收到信号:“EXC_BAD_ACCESS””消息开始。谁能帮我?我非常困惑...谢谢。 -(NSString *)fullName
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试合并四张图片以使其成为一张 uiimage。但是当我要执行 CFRelease 时,它崩溃了。如果我不这样做,就会导致内存泄漏和崩溃。如何解决? 请参阅下面的代码。 refere
ABAddressBook 发生了一件奇怪的事情。这是一些代码: - (NSArray*)addressBookArray { ABAddressBookRef addressBook = N
我正在处理我的一个处于维护阶段的项目,所以我没有太多的自由来一次更改一个主要 block ,在处理这个时,我在模拟器和设备上都看到了这个随机崩溃而应用程序与服务器同步。流动性登录->上传本地数据到服务
CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer]; CMBlockBufferRef buffer = CMSam
我有点困惑。我读过的所有地方都建议在使用 ARC 时,你仍然需要释放核心基础对象,这是有道理的,ARC 不管理它们。但是,我有一个方法使用了一些 CF 方法/对象,我在这些方法/对象上使用了 CFRe
这是我的代码,运行最后一行CFRelease(addressBook),程序崩溃!帮帮我~! ABAddressBookRef addressBook = ABAddressBookCreateWit
我有以下方法: + (NSString*) getMD5HashFromFile:(NSString*)filePath { CFStringRef md5hash = FileMD5Hash
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)i
我刚刚全身心投入到 iOS 开发中,目前在 queryServer 函数末尾的 CFRelease 函数中出现运行时错误(我在突出显示的行上添加了注释)但我没有如果我注释掉对 extractIPFro
我是一名优秀的程序员,十分优秀!