错误 ARC 'release' 不可用错误变为“表达式结果未使用”
Error ARC 'release' is unavailable error becomes "expression result unused'
我知道这是一个与 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];
错误是 "Expected Identifier"
来自
if(theAudioSound)[theAudioSound];
至
if(theAudioSound)theAudioSound;
警告是 "Expression Result Unused"
如果我使用两个更改中的第二个,它会起作用吗?
如果不;我需要做什么才能更改代码以使其正常工作?
// if(theAudioSound)[theAudioSound release];
您需要完全注释掉该行才能正常工作。
其实下面是另一种写法
if(theAudioSound)
{
[theAudioSound release];
}
如果简单地删除 release
,会产生语法错误。
"Delete the '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];
然后继续剩下的代码。希望这会有所帮助。
我知道这是一个与 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];
错误是 "Expected Identifier"
来自
if(theAudioSound)[theAudioSound];
至
if(theAudioSound)theAudioSound;
警告是 "Expression Result Unused"
如果我使用两个更改中的第二个,它会起作用吗? 如果不;我需要做什么才能更改代码以使其正常工作?
// if(theAudioSound)[theAudioSound release];
您需要完全注释掉该行才能正常工作。
其实下面是另一种写法
if(theAudioSound)
{
[theAudioSound release];
}
如果简单地删除 release
,会产生语法错误。
"Delete the '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];
然后继续剩下的代码。希望这会有所帮助。