gpt4 book ai didi

ios - 如何将 AVAudioRecorder 本地实例设置为 Property 以使其保持保留状态?

转载 作者:行者123 更新时间:2023-11-29 12:52:22 27 4
gpt4 key购买 nike

我创建了一个名为 ARecorder 的对象类。 (ARecorder.h/ARecorder.m) 实现有几个方法:

-void(setupAndRecord) 
-(void)stop

我设置了一个 AVAudioSession 共享实例,我用 NSURLallocinit *recorder 设置文件AVAudioRecorder对象,准备录音。然后是 [recorder record][recorder recordforduration(NSTimer] - 我都试过了。

当我将 *MyRecorder 实例化为类 ARecorder 的对象时,从 say... viewcontroller 调用 [.. .setupAndRecord] 方法 - 对象显然是在 MYRecorder 实例中的 AVAudioRecorder 对象有机会做任何事情之前创建和释放的......它创建了文件,开始记录,到那时对象 MYRecorder 显然立即被释放。

如果我设置一个循环,或者在 *MYRecorder 中使用@selector afterdelay,它会记录...这是一个 hack 而不是正确的方法。

我已经将 *recorder 设置为属性:

@property (strong, nonatomic) AVAudioRecorder *recorder 

我也将它声明为一个实例变量。没有什么能让它保持分配状态。我知道我需要使用属性而不是在方法中分配和初始化 AVAudioRecorder *recorder 对象?那么我该如何转动它呢

"recorder = [[AVAudioRecorder alloc] initWithContentsOfURL:myURL error:&err];" 

进入属性而不是本地实例?

如果我将所有这些代码移动到 viewcontroller - 显然 viewcontroller 保留在内存中,因此实例化 AVAudioRecorder 对象的 -void(setupAndRecord) 方法将保留保留直到完成 - 但 MVC 模式的重点不是将模型与 View 分开吗?

我还想在 View Controller 中使用 audioRecorderdidfinishrecording 委托(delegate) - 但我不知道如何在 中获取 AVAudioRecorder *recorder 的实例MYRecorder 对象在 ViewController 中使用 delegate

我希望 viewcontroller 成为 *recorderdelegate 并在 末尾调用 audioRecorderDidFinishRecording 时做一些事情 [录音机 recordforduration...]

显然,如果对象没有在内存中停留足够长的时间甚至无法记录,则不会调用委托(delegate)方法。但是可以说 MYRecorder 对象由于一些疯狂的原因被保留,在 [... recordforduration] 的末尾,它如何使用 viewcontroller 中的委托(delegate)方法而不是在 MYRecorder 中?我希望 MYRecorder 对象做的就是记录并在完成时告诉 viewcontroller 中的 didfinishrecording 委托(delegate)。看起来应该没有那么难。

最佳答案

听起来问题出在您的 MyRecorder 对象的所有权上。

我建议您将 MyRecorder 设为单例。在 SO 上搜索 Objective-C 中的单例设计模式。你应该找到很多例子。

您的强属性语法是正确的。如果您的 MyRecorder 有一个属性:

@property (strong, nonatomic) AVAudioRecorder *recorder 

然后在 MyRecorder 的设置代码中,您将使用如下代码:

self.recorder = [[AVAudioRecorder alloc] initWithContentsOfURL:myURL error:&err];

请注意,它读取的是 self.recorder,而不是 recorder。它使用属性的 setter 而不是直接访问实例变量,您应该养成这样做的习惯。

关于ios - 如何将 AVAudioRecorder 本地实例设置为 Property 以使其保持保留状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115122/

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