错误 ARC "发布"不可用 错误变为"表达式结果未使用"



我知道这是一个与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;

警告为"表达式结果未使用"

如果我使用两个更改中的第二个,它会起作用吗?如果没有;我需要做些什么来更改代码,使其正常工作?

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

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

if(theAudioSound) {
    theAudioSound = nil;
}

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

// if(theAudioSound)[theAudioSound release];

继续执行其余代码。希望这能有所帮助。

// if(theAudioSound)[theAudioSound release];

你需要完全评论掉这句话,这样才能奏效。

实际上,这是继之后的另一种书写方式

        if(theAudioSound)
    {
        [theAudioSound release];
    }

如果您简单地删除release,就会产生语法错误。

"删除‘release’"意味着你不需要发布它。所以,你只需要删除中的行或注释。这就是我的全部想法。

- (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];
}

最新更新