Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在NSTimer中播放AVAudioPlayer,而不存在内存泄漏?_Iphone_Objective C_Ios_Cocoa Touch_Avaudioplayer - Fatal编程技术网

Iphone 在NSTimer中播放AVAudioPlayer,而不存在内存泄漏?

Iphone 在NSTimer中播放AVAudioPlayer,而不存在内存泄漏?,iphone,objective-c,ios,cocoa-touch,avaudioplayer,Iphone,Objective C,Ios,Cocoa Touch,Avaudioplayer,这对我来说是一个长期存在的问题,我一直无法解决。 我正在播放一系列小音频文件。但是,如果我不释放AVAudioPlayer,我就会出现内存泄漏,如果我释放了它,文件就根本不会播放 我试过自动释放,但没有效果 - (void) playSoundShowLabel:(NSTimer*)theTimer { NSMutableDictionary *dict = [[[NSMutableDictionary alloc] initWithDictionary:[theT

这对我来说是一个长期存在的问题,我一直无法解决。 我正在播放一系列小音频文件。但是,如果我不释放
AVAudioPlayer
,我就会出现内存泄漏,如果我释放了它,文件就根本不会播放

我试过自动释放,但没有效果

- (void) playSoundShowLabel:(NSTimer*)theTimer {

    NSMutableDictionary *dict = [[[NSMutableDictionary alloc] 
         initWithDictionary:[theTimer userInfo]] autorelease];

    NSURL *clickURL = [NSURL fileURLWithPath:[NSString 
         stringWithFormat:@"%@/%@.mp3", [[NSBundle mainBundle] resourcePath], 
         [dict valueForKey:@"sWav"]]];  

    AVAudioPlayer *theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:
         clickURL error:nil];

    [theAudio play];
    theAudio.numberOfLoops = 0;
    //[theAudio release]; << stops play
}
-(无效)播放声音显示标签:(n计时器*)计时器{
NSMutableDictionary*dict=[[NSMutableDictionary alloc]
initWithDictionary:[theTimer userInfo]]自动释放];
NSURL*clickURL=[NSURL fileURLWithPath:[NSString]
stringWithFormat:@“%@/%@.mp3”,[[NSBundle mainBundle]resourcePath],
[dict valueForKey:@“sWav”]];
AVAudioPlayer*音频=[[AVAudioPlayer alloc]initWithContentsOfURL:
单击URL错误:无];
[音频播放];
theAudio.numberOfLoops=0;

//[theAudio release];为播放器使用一个实例变量,并确保它在音频结束或应中止之前保持有效

对于前者,使用其委托-对于后者,使用viewDidUnload或dealloc

现在,我假设您没有使用ARC

在接口声明中:

@interface HoldingThePlayerSomeViewController : UIViewController <AVAudioPlayerDelegate>
{
    AVAudioPlayer *theAudio;
}

为播放器使用一个实例变量,并确保它在音频结束或应中止之前保持有效

对于前者,使用其委托-对于后者,使用viewDidUnload或dealloc

现在,我假设您没有使用ARC

在接口声明中:

@interface HoldingThePlayerSomeViewController : UIViewController <AVAudioPlayerDelegate>
{
    AVAudioPlayer *theAudio;
}

您需要创建一个AvaudioPlayerLegate,以便在播放完成后被召回。在那里您可以解除分配您的AVAudioPlayer。

您需要创建一个AvaudioPlayerLegate,以便在播放完成后被召回。在那里您可以解除分配您的AVAudioPlayer