我正在录制视频的尾随缓冲区。我每隔15秒创建一个AVAssetWriter
的新实例,并添加AVAssetWriterInput
的实例作为输入。我正在使用AVCaptureVideoDataOutput
抓取帧,然后像这样添加它们:
[writerInput appendSampleBuffer:sampleBuffer]
这在大多数情况下都可以正常工作,但有时应用程序会因此错误消息而崩溃:
*** -[CFDictionary removeObjectForKey:]: message sent to deallocated instance 0x96b28a0
这个错误信息甚至意味着什么?可能意味着AVAssetWriter
已被解除分配?或者这是否意味着AVAssetWriterInput
已被解除分配?还有别的吗?
谢谢,
詹姆斯
答案 0 :(得分:0)
消息removeObjectForKey:被发送到地址为0x96b28a0的CFDictionary(可能是NSDictionary)实例。该实例已被解除分配,但代码仍在使用指针。
如果您在启用僵尸(也就是NSZombiesEnabled)的情况下运行,系统将跟踪解除分配的对象并保留足够长的引用,以便使用悬空指针进行检测。
知道您过度释放对象比找到错误的版本更容易。关于这个问题已经写了很多。