J'ai une instance de AVPlayer
dans mon application. Utiliser la fonction d'observation de limite de temps:Fuite dans [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];
}]];
Le problème est que, selon les instruments que je suis des tableaux et une fuite quelque part autour de valeurs de ce code. J'ai vérifié le compte de retenue du jeton d'observation du temps retourné par AVPlayer
sur les endroits marqués A et B dans l'exemple de code. Au point A, le nombre de rétention est 2, au point B, le nombre de rétention augmente à 3 (!). L'ajout d'un pool autorelease local ne change rien. Je sais que le nombre de retenue n'est pas une mesure fiable, mais cela semble être louche. Des idées sur pourquoi le nombre de retenue augmente ou sur mes fuites? La trace de la pile au point de fuite ressemble à ceci:
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:]
Si je comprends bien les choses, AVPlayerOccasionalCaller
est l'objet « opaque » retourné par addBoundaryTimeObserverForTimes:queue:usingBlock:
, ou l'observateur de temps.
Avez-vous trouvé une solution? Je fuis un objet __NSArrayI et CMTimeAsValue lorsque j'utilise cet observateur. – Bastian
Non, je suis passé à un truc de lecture vidéo différent pour me débarrasser de la limite temporelle en regardant tout le temps. – zoul
merci pour votre réponse :) – Bastian