0

在某个视图中,我有一堆 AVAudioPlayer 属性,每个属性都应该在某个用户操作时播放。在播放选定的 AVAudioPlayer 时,如果播放了另一个 AVAudioPlayer - 它应该停止。

为了管理它,我创建了一个包含所有 AVAudioPlayer 属性的数组,并且在用户选择时,在播放选定的 AVAudioPlayer 之前,我希望检查所有 AVAudioPlayer 并停止它们。

问题是创建数组的合理位置是在开始时(比方说,在 ViewDidLoad 中),此时没有任何 AVAudioPlayer 属性通过 alloc+init - 所以如果我在调试器中查看数组,它显示为空(对象数 = 0)。目前,我只在用户实际选择某个 AVAudioPlayer 时才执行 alloc+init 操作。

我也可以在开始时为所有 AVAudioPlayers 执行 alloc+init,但这会占用不必要的资源。

有没有办法在不占用所需资源的情况下创建这个数组?即用“空”对象创建数组,然后分配和启动它们?

4

1 回答 1

1

我也有类似的情况。我一直在做的是:

NSArray *myArray = [NSArray arrayWithObjects:@"",@"",@"",@""];

in viewDidLoad(如果我的数组将有 4 个对象)。然后,当我有可用的信息时,我会:

[myArray replaceObjectAtIndex:myLocationToAddValue withObject:myObject];

我看到了我公司的其他人用完全不同的语言编写的一个非常古老的项目中的一些代码,从而产生了这个想法。它似乎可以满足我的需要,并且它确实具有额外的好处,我可以遍历我的数组并检查

if ([[myArray objectAtIndex:i] length] == 0) 

看看我已经在哪里有物品了。我应该注意,我要添加的对象都将是 NSStrings - 如果它循环并发现一个对象已放入不是字符串的数组中(或者,更一般地说,没有“长度" 方法),我猜会发生一些令人讨厌的事情,但我还没有检查过。

我敢肯定一定有更好的解决方案,但我会把它放在那里,因为还没有任何答案。我认为一个看似有效的草率答案总比没有答案好。

于 2012-10-10T20:20:08.847 回答