我创建了一个包含AVAudioPlayer对象的单例
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@interface drwAudioPlayer : NSObject <AVAudioPlayerDelegate>
@property AVAudioPlayer *aPlayer;
+(drwAudioPlayer *) sharedPlayer {
static drwAudioPlayer *sharedPlayer = nil;
if (!sharedPlayer) {
sharedPlayer = [[super allocWithZone:nil] init];
}
return sharedPlayer;
}
-(void) setPlayerEpisode:(NSData *) episodeFile {
NSError *error;
aPlayer = nil;
aPlayer = [[AVAudioPlayer alloc] initWithData:episodeFile error:&error];
}
在我的主视图中,我包含了上面的类,并创建了一个drwAudioPlayer类型的对象。当我调用[drwAudioPlayer.aPlayer setPlayerEpisode:foo]
时,我看到新文件正在加载并且旧文件被释放。
但是一旦我开始播放文件然后尝试调用[drwAudioPlayer.aPlayer setPlayerEpisode:foo2]
,内存就会增加所加载新文件的大小。
在加载要播放的新文件之前,我必须做什么才能基本上释放内存。
我正在使用ARC。
答案 0 :(得分:0)
我还在stackoverflow上发现了这些帖子,它们说的是同样的事情:
答案 1 :(得分:-2)
根据定义,单例是内存泄漏。不要使用它们。相反,在代码中对音频播放器进行引用,当使用播放器的视图控制器消失时,播放器将被取消分配。在iOS下,内存不是垃圾收集,你根本无法做到这样的事情并期望内存被释放,ARC不是垃圾收集器。