I am runung Instruments on an iPhone 4S.
I am using AVAudioPlayer inside this method:
-(void)playSound{
NSURL *url = [self.word soundURL];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (!error) {
[audioPlayer prepareToPlay];
[audioPlayer play];
}else{
NSLog(@"Problem With audioPlayer on general card. error : %@ | url %@",[error description],[url absoluteString]);
}
I am getting leaks when playing the sound files:
Leaked objects:
1.
Object: NSURL
Responsible Library: Foundation
Responsable Frame: Foundation -[NSURL(NSURL) allocWithZone:]
2.
Object: _NSCFString
Responsible Library: Foundation
Responsable Frame: Foundation -[NSURL(NSURL) initFileURLWithPath:]
Instruments does not point directly to my code so I find it hard to locate the leak reason.
MY QUESTION
What could cause the leak?
OR How can I locate leaks when I am not responsible to the code?
EDIT
This is the schema from Instruments cycles view:

Thanks Shani
Looks to be a leak in Apple’s code… I tried using both
-[AVAudioPlayer initWithData:error:]and-[AVAudioPlayer initWithContentsOfURL:error:]In the first case, the allocated
AVAudioPlayerinstance retains the passed inNSData. In the second, the passed inNSURLis retained:I’ve attached some screen shots of the Instruments window showing the retain/release history for a passed in
NSDataobject.You can see the
AVAudioPlayerobject then creates a C++ objectAVAudioPlayerCpp, which retains the NSData again:Later, when the
AVAudioPlayerobject is released, theNSDatais released, but there’s never a release call from the associatedAVAudioPlayerCpp… (You can tell from the attached image)Seems you’ll have to use a different solution to play media if you want to avoid leaking NSData/NSURL’s..
Here’s my test code: