2012-02-23 46 views
-1

可能重复:
How do I use NSTimer
Decrement Issue不正确的减量

我真的很努力摆脱如下警告:

i。对象的引用计数的递减不正确此时不属于主叫方。

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

下面是代码:

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

我读过的其他职位和任何帮助,将不胜感激!

+0

使它autorelease。 – fibnochi 2012-02-23 15:27:52

+0

嘿谢谢你的回应!我尝试使用此代码自动释放 - (IBAction)playKick PlayAudio * thisPlayAudio = [[[[PlayAudio alloc] init] playFile:(@“file”)] autorelease]; }但后来我得到一个'未使用变量'的警告,'分析仪'警告仍然没有去! – Martin 2012-02-23 15:58:21

+1

这段代码看起来很好(如果写得有点不合常规,可能依靠实现细节)。你确定问题出在这个方法上吗?警告指出什么? – Jasarien 2012-02-23 16:01:24

回答

1

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

也许你的代码应该是:

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

甚至

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

我必须看到PlayAudio的类定义,但是怀疑playFile方法返回它的PlayAudio实例。你可能希望这样的:

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

也许这将有助于:

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

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

+0

嘿,大家非常感谢你花时间回复!我真的很感激它。对不起,我发布了两次这个问题。我不确定它最初是否正确发布。并感谢Almo!上面的工作!我可能会在我走路之前试着跑步!祝愿所有人。 Martin – Martin 2012-02-23 20:29:03

+0

这个问题似乎已经与其他问题合并了,因此您可能需要通过单击checkmar来选择最有助于解决问题的答案。现在你知道系统在下一次需要帮助时如何工作。 :) – Almo 2012-02-23 21:02:47

1

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

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

嘿非常感谢你的帮助!我已经把它整理好了! – Martin 2012-02-23 20:30:03