我正在使用仪器分析Objective-C ++代码中的泄漏,我得到了这个:
Leaked Object Address Size Responsible Library Responsible Frame
Malloc 32 Bytes,0x8135bc0 32 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x8135be0 48 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x8135c10 32 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x8135c30 32 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 48 Bytes,0x8135c50 48 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x813a820 48 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFArray,0x813a850 32 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x813a870 48 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x813a8a0 32 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
Malloc 32 Bytes,0x813a8d0 32 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
我认为这与我编写的用于在应用程序启动时播放声音的代码有关。我这样做:在applicationDidFinishLaunching ::
中调用此方法- (void)playJingle {
// This is a detached thread so I need a new pool.
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// This audio player will be released in audioPlayerDidFinishPlaying.
NSString *newAudioFile = [[NSBundle mainBundle] pathForResource:@"jingle" ofType:@"m4a"];
AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:newAudioFile] error:NULL];
[av setDelegate:self];
[av play];
// Release.
[pool release];
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)av successfully:(BOOL)flag
{
// Release the AVAudioPlayer.
[av release];
}
在后台线程中(使用performSelectorInBackground:withObject :)调用。我错过了什么吗?为什么我会有这些泄漏? 谢谢!
答案 0 :(得分:6)
您是否尝试在设备上运行该应用程序? AVAudioPlayer在模拟器上容易出现误报和内存泄漏检测......
Here's a very similar question with a similar looking leak report
答案 1 :(得分:-1)
这不起作用,您将AVPlayer
分配给局部变量:
AVAudioPlayer *av = ...
而不是实例变量。
-(void>) playJinlge{
...
self.av = .....
}
-(void) didfinish ... {
[self.av release];
self.av=nil;
}