[英]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.