[AVRetainReleaseWeakReference release]:发送到释放实例 0x171a2cd40 的消息

[AVRetainReleaseWeakReference release]: message sent to deallocated instance 0x171a2cd40

[崩溃发生时堆栈的屏幕截图][1]

这发生在:

之后

[self.sampleBufferDisplayLayer 停止请求媒体数据]; [self.sampleBufferDisplayLayer removeFromSuperlayer];

而self.sampleBufferDisplayLayer的地址是0x171a2d040;这是否意味着已经被释放两次的实例(0x171a2cd40)是 AVSampleBufferDisplayLayer 对象内部的东西?那我为什么要为this inside object的twice dealloc error负责呢?有人遭受过这种痛苦吗?

0   libsystem_malloc.dylib   0x0000000196cbd9cc 0x196cb8000 + 22988
1   TTKanKan                 0x00000001008733b8 0x1000e0000 + 7943096
2   TTKanKan                 0x0000000100864584 0x1000e0000 + 7882116
3   TTKanKan                 0x000000010085f1e0 0x1000e0000 + 7860704
4   TTKanKan                 0x000000010085f36c 0x1000e0000 + 7861100
5   TTKanKan                 0x000000010085edd4 0x1000e0000 + 7859668
6   TTKanKan                 0x000000010085f7b8 0x1000e0000 + 7862200
7   TTKanKan                 0x000000010085f5fc 0x1000e0000 + 7861756
8   TTKanKan                 0x000000010085ef3c 0x1000e0000 + 7860028
9   TTKanKan                 0x000000010085ecac 0x1000e0000 + 7859372
10  libsystem_pthread.dylib  0x0000000196d2bdb4 _pthread_body + 160
11  libsystem_pthread.dylib  0x0000000196d2bd10 _pthread_start + 156
12  libsystem_pthread.dylib  0x0000000196d28ee4 thread_start + 0

我通过在另一个线程中删除相同的 AVSampleBufferDisplayLayer 释放和分配来修复它,尽管我已经使用@synchronized(self) 在不同的线程中同步它们。现在 AVSampleBufferDisplayLayer 的释放和分配只发生在一个线程中。