错误ARC'release'不可用错误变为“表达结果未使用”

时间:2015-03-24 04:09:24

标签: ios objective-c automatic-ref-counting release

我知道这是与ARC弃用的代码类似的问题但是,我有一些旧的代码来自NIB日,我正在升级到Storyboards,这样做,代码修订导致我一些问题。

在下面的代码中:

- (void)audioSound {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"sound-file" ofType:@"mp3"];
    if(theAudioSound)[theAudioSound release];
    theAudioSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudioSound.volume = 0.30;
    [theAudioSound play];
}

我遇到ARC问题;经过多次尝试寻找解决方案,我只能找到以下建议。

   Delete the 'release'

如果我删除了该版本 - 取决于我如何删除它 - 我收到以下错误消息。

if(theAudioSound)[theAudioSound release];

if(theAudioSound)[theAudioSound];

错误是“预期标识符”

if(theAudioSound)[theAudioSound];

if(theAudioSound)theAudioSound;

警告是“表达结果未使用”

如果我使用这两个变化中的第二个会有效吗? 如果不;我需要做些什么才能更改代码以使其正常工作?

3 个答案:

答案 0 :(得分:0)

// if(theAudioSound)[theAudioSound release];

你需要完全注释掉这一行才能发挥作用。

实际上这是另一种写作方式

        if(theAudioSound)
    {
        [theAudioSound release];
    }

如果您只是删除release,则会产生语法错误。

答案 1 :(得分:0)

“删除'发布'”表示您无需发布它。所以,你只需删除该行或评论。这就是我想的全部。

- (void)audioSound {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"sound-file" ofType:@"mp3"];
    //if(theAudioSound)[theAudioSound release];
    theAudioSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudioSound.volume = 0.30;
    [theAudioSound play];
}

答案 2 :(得分:0)

好吧,如果已经创建了任何对象,release实际上会释放(减少保留计数)。但是在ARC中,您不必手动release

我建议清除AVAudioPlayer实例而不是release,它会起作用。所以代码看起来像:

if(theAudioSound) {
    theAudioSound = nil;
}

OR

只需删除或注释掉if(theAudioSound)[theAudioSound release];行,如:

// if(theAudioSound)[theAudioSound release];

继续使用其余代码。希望这会有所帮助。