gpt4 book ai didi

objective-c - Simple Soundboard App 中的 iOS AudioPlayer 内存泄漏

转载 作者:行者123 更新时间:2023-11-28 20:46:41 25 4
gpt4 key购买 nike

我正在开发一个简单的音板应用程序,只要您按下一个按钮,它就会播放相应的声音。但是,我似乎没有正确地释放我的变量(或者现在根本就没有释放我的变量,因为我将我的代码恢复到可以播放声音但有内存泄漏的地方)并且我知道它不符合应用程序商店标准。我需要弄清楚如何解决此问题,因此我们将不胜感激!

我的 ViewController.h 是:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>


@interface FirstViewController : UIViewController <AVAudioPlayerDelegate>
{

}

-(IBAction)pushTropical;
-(IBAction)pushVakidis;
-(IBAction)pushTwiggy;
-(IBAction)pushScootsy;
-(IBAction)pushJackiePass;
-(IBAction)pushJackieIntro;
-(IBAction)pushBB;
-(IBAction)yourProblem;
-(IBAction)pushSuckMy;
-(IBAction)pushBallGirl;
-(IBAction)pushGoofballs;
-(IBAction)pushHavingFun;
-(IBAction)pushwhoBambi;
-(IBAction)pushExcited;
-(IBAction)pushdirtyHippie;
-(IBAction)pushBambiMother;
-(IBAction)pushEverybodyPanic;
-(IBAction)pushSmallChild;
-(IBAction)pushBurnHouse;
-(IBAction)pushTitanic;
-(IBAction)pusherection;

@end

我的 ViewController.m 是:

#import "FirstViewController.h"
#import "AVFoundation/AVAudioPlayer.h"



@implementation FirstViewController

-(IBAction)pushTropical {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Tropical" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];





}

-(IBAction)pushVakidis {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Vakidis" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}
-(IBAction)pushBB {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"BB" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushTwiggy {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Twiggy" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushScootsy {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Scootsy" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushJackiePass {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"JackiePass" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushJackieIntro {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"JackieIntro" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushyourProblem {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"yourProblemShort" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushBallGirl {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"ballgirl" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushGoofballs {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"goofballs" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushSuckMy {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"yourfamily" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushHavingFun {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"dukesBase" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushwhoBambi {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"whoBambi" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushExcited {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"dukesIsExcited" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushdirtyHippie {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"dirtyhippie" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushBambiMother {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"BambiMother" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushEverybodyPanic {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"EverybodyPanic" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushSmallChild {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"SmallChild" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushBurnHouse {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"BurnHouse" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pushTitanic {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Titanic" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

-(IBAction)pusherection {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"erection" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];


}

/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
*/

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
}
*/

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];


// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[super dealloc];

}

@end

我试过像这样在各种推送方法(pushTropical、pushBurnHouse 等)中释放“theAudio”变量...

-(IBAction)pushExcited {
NSString *path = [[NSBundle mainBundle]
pathForResource:@"dukesIsExcited" ofType:@"m4a"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];

[theAudio release];





}

...然而,声音根本无法播放。所以我很茫然,因为每当我尝试在任何地方释放“theAudio”时,但在这些函数内部,它都不会识别它来释放它。帮助!

最佳答案

您应该通过 audioPlayerDidFinishPlaying:successfully: 释放 AVAudioPlayer AVAudioPlayerDelegate将类设置为委托(delegate)后的方法。

即:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
[player release];
}

完成此操作后,一切都会好起来的。

关于objective-c - Simple Soundboard App 中的 iOS AudioPlayer 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com