我们正在使用UInavigationController,其中一个视图是播放音轨的视图。
我们正在使用AVfountation框架。
我们在点击按钮
时导航到audiolist(播放音乐)-(IBAction)audioBtnClicked
{
audiolist *audio=[[audiolist alloc] initWithNibName:@"audiolist" bundle:nil];
[self.navigationController pushViewContrller:audio animated:YES];
[audiolist release];
}
当用户播放音乐并导航时,音乐会继续播放
问题:当用户导航回歌曲列表并播放另一首曲目时, 2首歌曲同时播放。
我们认为每次用户导航时都会创建audiolist
的新实例。
我们希望只有audiolist
的一个实例。我们如何使audiolist
的第一个实例持久化,我们如何回顾它?
答案 0 :(得分:1)
你必须做
[audio release];
而不是
[audiolist release];
音响大师似乎是你的班级名字。命名约定说类应该是大写和驼峰,所以它应该是AudioList。它会让你的代码更具可读性。
要拥有AudioList的单个共享实例,您可以这样做:
在标题中添加一个类方法:
+ (AudioList *) sharedInstance;
然后将其添加到您的实现文件中:
@implementation AudioList
static AudioList *gSharedInstance = nil;
+ (AudioList *) sharedInstance {
if (gSharedInstance == nil) {
gSharedInstance = [[AudioList alloc] init];
}
return gSharedInstance;
}
现在您始终可以使用
访问该实例[AudioList sharedInstance];
干杯。
答案 1 :(得分:0)
创建一个单一的AudioManager类来处理所有音乐播放。当您导航到该视图控制器时,抓取该AudioManager的共享实例以执行您在该视图中执行的任何操作。
您不希望视图持久存在,因为这会导致MVC分离错误。
Apple讨论了不同的设计模式及其Objective-c实现,包括单例: