簡體   English   中英

錯誤ARC'發布'不可用,錯誤變為“未使用表達式結果”

[英]Error ARC 'release' is unavailable error becomes "expression result unused'

我知道這是與ARC不推薦使用的代碼類似的問題,但是,在NIB時代,我有一些舊代碼正在升級到Storyboard,因此,代碼修訂引起了我一些問題。

在下面的代碼中:

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

警告是“未使用表達結果”

如果我使用這兩個更改中的第二個,它將起作用嗎? 如果不; 我需要做些什么來更改代碼以使其起作用?

// if(theAudioSound)[theAudioSound release];

您需要完全注釋掉該行才能起作用。

其實這是另一種寫法

        if(theAudioSound)
    {
        [theAudioSound 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];
}

好吧,如果已經創建了任何對象,那么release實際上會在此處釋放(減少保留計數)。 但是在ARC中,您不必手動release它。

我建議清除AVAudioPlayer實例而不是release ,它將起作用。 因此代碼如下所示:

if(theAudioSound) {
    theAudioSound = nil;
}

要么

只需刪除或注釋掉if(theAudioSound)[theAudioSound release]; 喜歡:

// if(theAudioSound)[theAudioSound release];

並繼續其余的代碼。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM