语言 - 目标-C
我正在使用SoundEffect类播放短音。我正在使用NSTimer调用此方法:
- (void)count {
count++;
if (count == 16) {
NSBundle *mainBundle = [NSBundle mainBundle];
SoundEffect *soundEffect = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"beep" ofType:@"aif"]];
[soundEffect play];
count = 0;
}
seconds = seconds - 0.0625; // is equal to 1/16th of a second; effectively takes off one second per second
if (seconds == 0) {
[timer invalidate]; // cancels timer
[timer release];
}
[self convertSeconds];
}
(计数就是声音以一定的间隔播放。)
无论如何,一切正常,但我认为每次我的计时器触发时都会继续分配和初始化SoundEffect类(这很常见)。当我按下按钮启动计时器时,是否有一种方法可以使用aloc和init,并将其分配并初始化,这样我所要做的就是[soundEffect play]?
谢谢!
答案 0 :(得分:4)
也许这个链接会有所帮助:Creating a Singleton Instance
答案 1 :(得分:3)
您可以将指向SoundEffect类的指针作为您自己类的成员。
答案 2 :(得分:1)
如果这只是你在count
方法中使用的声音,你可以使用一个静态变量来做这个技巧(请注意,这在技术上是一个内存泄漏,因为对象永远不会被释放)
- (void)count {
count++;
if (count == 16) {
NSBundle *mainBundle = [NSBundle mainBundle];
static SoundEffect * soundEffect = nil;
if (soundEffect == nil)
soundEffect = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"beep" ofType:@"aif"]];
[soundEffect play];
count = 0;
}
seconds = seconds - 0.0625; // is equal to 1/16th of a second; effectively takes off one second per second
if (seconds == 0) {
[timer invalidate]; // cancels timer
[timer release];
}
[self convertSeconds];
这只会分配一次对象。
答案 3 :(得分:0)
使用静态变量
您可以在方法中使用静态变量,如
- (void)count {
static SoundEffect *soundEffect =
[[SoundEffect alloc] initWithContentsOfFile:
[mainBundle pathForResource:@"beep" ofType:@"aif"]];
...
}
此处soundEffect
仅在count
的第一次调用时初始化一次,并将一直保持到执行结束。
不推荐使用:使用单身人士
编辑:删除了单身部分。我不认为这与这个问题有关。
答案 4 :(得分:0)
您可以在appDelegate中初始化它,并在任何给定时间通过那里访问它。记得也要解除它。
另一个解决方案可能是制作单身