分析器中引用计数的减少不正确

时间:2012-02-23 15:20:07

标签: objective-c xcode ios4

  

可能重复:
  How do I use NSTimer
  Decrement Issue

我真的很想摆脱以下警告:

  

此时不属于调用者所拥有的对象的引用计数的不正确递减。

代码编译很好,应用程序似乎工作正常。基本上我正在尝试创建一个类的对象来按下按钮时播放一个短的音频剪辑。我创建了一个类来播放该文件,并将这些对象作为字符串传递给文件名。

以下是代码:

- (IBAction) playKick 
{        
    PlayAudio *thisPlayAudio= [[[PlayAudio alloc] init] playFile:(@"RockSnare")];
    [thisPlayAudio release];
}

我已阅读其他帖子,我们非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

我必须看到PlayAudio的类定义,但playFile方法返回其PlayAudio实例是值得怀疑的。你可能想要这个:

PlayAudio *thisPlayAudio = [[PlayAudio alloc] init];
[thisPlayAudio playFile:(@"RockSnare")];
[thisPlayAudio release];

答案 1 :(得分:2)

也许这会有所帮助:

- (IBAction) playKick {
    PlayAudio *thisPlayAudio= [[PlayAudio alloc] init];
    [thisPlayAudio playFile:(@"RockSnare")];
    [thisPlayAudio release];
}

这样就完成了创建对象并将其分配给thisPlayAudio,然后播放音频。你有什么把thisPlayAudio设置为playFile调用的结果。

答案 2 :(得分:1)

playFile:method的返回类型是什么?你确定它会返回你调用它的同一个对象吗?

也许你的代码应该是:

PlayAudio *thisPlayAudio= [[PlayAudio alloc] init];
[thisPlaysAudio playFile:@"RockSnare"];
[thisPlaysAudio release];

甚至

[[[[PlayAudio alloc] init] autorelease] playFile:(@"RockSnare")];

答案 3 :(得分:1)

您正在尝试在创建后立即释放对象。也许,你在playFile方法中也做错了。并且您的播放器不会播放任何文件,因为您在一个范围内创建和删除它。试试这个:

PlayAudio *thisPlayAudio = nil;
- (IBAction) playKick {
    if (thisPlayAudio){
      [thisPlayAudio release]; thisPlayAudio = nil;
    }
    thisPlayAudio= [[PlayAudio alloc] init] autorelease];
    [thisPlayAudio playFile:(@"RockSnare")];
}