PSA:[[AVAudioPlayer alloc]init]在iOS 13.1和x2B中崩溃;(和AVAudioPlayer())

PSA:[[AVAudioPlayer alloc]init]在iOS 13.1和x2B中崩溃;(和AVAudioPlayer()),ios,objective-c,swift,avfoundation,ios13,Ios,Objective C,Swift,Avfoundation,Ios13,我们的一个应用程序使用AudioManager类处理各种音频文件的播放,并在init上创建两个AVAudioPlayer实例。我们的许多方法都假设这两个实例永远不会为零,因此我们在初始化manager类的单例时使用genericinit方法创建这两个实例,如下所示: - (id)init { self = [super init]; if(self){ _pushPlayer = [[AVAudioPlayer alloc] init]; _que

我们的一个应用程序使用AudioManager类处理各种音频文件的播放,并在init上创建两个AVAudioPlayer实例。我们的许多方法都假设这两个实例永远不会为零,因此我们在初始化manager类的单例时使用generic
init
方法创建这两个实例,如下所示:

- (id)init
{
    self = [super init];
    if(self){
        _pushPlayer = [[AVAudioPlayer alloc] init];
        _queuePlayer = [[AVAudioPlayer alloc] init];
    }
    return self;
}
这是最好的方法吗?也许不是,但这不是重点。关键是,13.1在如何分配/取消分配AVaudioplayer方面存在一些错误。如果您以这种方式创建AVAudioPlayer,当您的应用程序尝试取消分配时,它将崩溃。您将获得音频播放器指针的
EXC\u BAD\u访问权限

此外,试图修改虚拟玩家,例如将代理设置为零(甚至为零),将导致类似的崩溃

  • (多亏了。)

我们的应用程序在运行iOS 13.0及更早版本的设备上运行完全正常。我们从app Store在运行多个版本的设备上安装了该应用程序,它仅在运行至少13.1的设备上崩溃

我还注意到,
init
方法没有出现在的官方文档中,尽管该方法没有被弃用,并且在使用时也没有给出警告

不要使用
[[AVAudioPlayer alloc]init]

或者
AVAudioPlayer()
,适用于使用Swift的用户。同样:这是一个发布问题的网站,然后可以发布答案。请重写此内容,使其具有适当的、可接受的问题,然后将解决方案作为答案发布在下面。