泄漏在我的應用程序中有一個AVPlayer
的實例。我用的時間邊界觀測功能:[AVPlayer addBoundaryTimeObserverForTimes]
[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(!)。添加本地autorelease池不會改變任何東西。我知道保留數不是一個可靠的指標,但這似乎是可疑的。關於爲什麼保留數增加或關於泄漏的任何想法?在泄漏點的堆棧跟蹤看起來是這樣的:
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:
回來的時候觀察者的「不透明」對象,或。
您是否找到了解決方案?我在使用這個觀察者時泄漏了一個__NSArrayI和CMTimeAsValue對象 – Bastian 2011-05-23 13:25:00
不,我已經切換到不同的視頻回放技巧來擺脫觀看所有時間邊界的時間邊界。 – zoul 2011-05-24 07:00:06
感謝您的回答:) – Bastian 2011-05-24 08:45:16