Memory leaks [AVPlayer addBoundaryTimeObserverForTimes]中泄漏

Memory leaks [AVPlayer addBoundaryTimeObserverForTimes]中泄漏,memory-leaks,ios,avplayer,Memory Leaks,Ios,Avplayer,我的应用程序中有一个AVPlayer的实例。我使用时间边界观察功能: [self setTimeObserver:[player addBoundaryTimeObserverForTimes:watchedTimes queue:NULL usingBlock:^{ NSLog(@"A: %i", [timeObserver retainCount]); [player removeTimeObserver:timeObserver];

我的应用程序中有一个
AVPlayer
的实例。我使用时间边界观察功能:

[self setTimeObserver:[player addBoundaryTimeObserverForTimes:watchedTimes
    queue:NULL usingBlock:^{
        NSLog(@"A: %i", [timeObserver retainCount]);
        [player removeTimeObserver:timeObserver];
        NSLog(@"B: %i", [timeObserver retainCount]);
        [self setTimeObserver:nil];
    }]];
问题是,根据仪器,我在代码的某个地方泄漏了一些数组和值。我在示例代码中标记A和B的位置上检查了由
AVPlayer
返回的时间观察令牌的保留计数。在A点,保留计数为2,在B点,保留计数增加到3(!)。添加本地自动释放池不会改变任何事情。我知道保留计数不是一个可靠的指标,但这似乎有点可疑。关于为什么保留数量增加或者我的漏洞有什么想法吗?泄漏点处的堆栈跟踪如下所示:

   0 libSystem.B.dylib calloc
   1 libobjc.A.dylib _internal_class_createInstanceFromZone
   2 libobjc.A.dylib class_createInstance
   3 CoreFoundation __CFAllocateObject2
   4 CoreFoundation +[__NSArrayI __new::]
   5 CoreFoundation -[__NSPlaceholderArray initWithObjects:count:]
   6 CoreFoundation +[NSArray arrayWithObjects:count:]
   7 CoreFoundation -[NSArray sortedArrayWithOptions:usingComparator:]
   8 CoreFoundation -[NSArray sortedArrayUsingComparator:]
   9 AVFoundation -[AVPlayerOccasionalCaller initWithPlayer:times:queue:block:]
  10 AVFoundation -[AVPlayer addBoundaryTimeObserverForTimes:queue:usingBlock:]
如果我理解正确,
AVPlayerOccasionalCaller
是由
addBoundaryTimeObserverForTimes:queue:usingBlock:
或时间观察者返回的“不透明”对象。

不要使用-retainCount。 一个物体的绝对计数是没有意义的

您应该调用
release
的次数与使对象保留的次数完全相同。不少于(除非你喜欢泄漏),当然,不多于(除非你喜欢崩溃)

有关详细信息,请参阅


在这种特定情况下,打印的保留计数完全不相关
removeTimeObserver:
可能正在保留和自动删除对象。没关系;这是一个实现细节


在仪器中使用泄漏模板时,请注意分配仪器配置为记录参考计数。检测到“泄漏”后,查看该对象的引用计数事件列表。可能会有一个堆栈,其中您的一些代码触发了一个额外的retain。如果没有,则可能是框架错误。

您找到解决方案了吗?使用此observerNo时,我泄漏了一个_unsarrayi和CMTimeAsValue对象。我已切换到不同的视频播放技巧,以消除一起观看的时间边界。