错误 ARC 'release' is available 错误变为“表达式结果未使用”

Posted

技术标签:

【中文标题】错误 ARC \'release\' is available 错误变为“表达式结果未使用”【英文标题】:Error ARC 'release' is unavailable error becomes "expression result unused'错误 ARC 'release' is available 错误变为“表达式结果未使用” 【发布时间】:2015-03-24 04:09:23 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

if(theAudioSound) 
    theAudioSound = nil;

只需删除或注释掉if(theAudioSound)[theAudioSound release];这一行即可:

// if(theAudioSound)[theAudioSound release];

然后继续其余代码。希望这会有所帮助。

【讨论】:

【参考方案2】:
// if(theAudioSound)[theAudioSound release];

您需要完全注释掉该行才能使其正常工作。

其实这是另一种写法

        if(theAudioSound)
    
        [theAudioSound release];
    

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

【讨论】:

【参考方案3】:

“删除'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];

【讨论】:

以上是关于错误 ARC 'release' is available 错误变为“表达式结果未使用”的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu public key is not available的错误

转The requested resource (/) is not available

全网多种方式解决The requested resource [/] is not available的错误

关于idea部署项目为什么抛出####:war: Server is not connected. Deploy is not available的错误?

Eclipse CDT 弄好后 No project type available

合适的 -Is -fno-objc-arc 支持