【发布时间】:2011-02-07 17:41:15
【问题描述】:
我一直在搞乱泄漏,试图找出哪个函数没有被释放(我还是新手),真的可以利用一些经验丰富的洞察力。
我有这段代码似乎是罪魁祸首。每次我按下调用此代码的按钮时,都会额外分配 32kb 的内存给内存,当释放按钮时,内存不会被释放。
我发现每次调用AVAudioPlayer来播放m4a文件时,解析m4a文件的最终函数是MP4BoxParser::Initialize(),这反过来又通过Cached_DataSource::ReadBytes分配了32kb的内存
我的问题是,我如何在完成后解除分配,以便每次按下按钮时都不会继续分配 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];
}
【问题讨论】:
标签: iphone objective-c memory-leaks avaudioplayer