我一直在搞乱 Leaks 试图找出哪个函数没有被释放(我对此仍然很陌生)并且可以真正使用一些经验丰富的洞察力。
我有这段代码似乎是罪魁祸首。每次我按下调用此代码的按钮时,都会额外分配 32kb 的内存给内存,并且当释放按钮时,该内存不会被释放。
我发现每次AVAudioPlayer
调用播放 m4a 文件时,解析 m4a 文件的最终函数是MP4BoxParser::Initialize()
,这反过来又通过分配 32kb 的内存Cached_DataSource::ReadBytes
我的问题是,我如何在完成后重新分配它,以便每次按下按钮时它不会继续分配 32kb?
非常感谢您提供的任何帮助!
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//stop playing
theAudio.stop;
// cancel any pending handleSingleTap messages
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(handleSingleTap) object:nil];
UITouch* touch = [[event allTouches] anyObject];
NSString* filename = [g_AppsList objectAtIndex: [touch view].tag];
NSString *path = [[NSBundle mainBundle] pathForResource: filename ofType:@"m4a"];
theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio prepareToPlay];
[theAudio setNumberOfLoops:-1];
[theAudio setVolume: g_Volume];
[theAudio play];
}