【问题标题】:Passing address of non-local object to __autoreleasing parameter for write-back将非本地对象的地址传递给 __autoreleasing 参数以进行回写
【发布时间】:2011-11-29 11:23:29
【问题描述】:

我正在尝试使用 xcode 4.2 制作应用程序,但我真的很困惑为什么会发生这种情况。 有人可以帮我解释一下为什么出现&error时会出现错误

将非本地对象的地址传递给__autoreleasing参数以进行回写

RootViewController.h

RootViewController.m

【问题讨论】:

  • 解决方案... In .h --> NSError *__autoreleasing * error; in.m --> [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:error];

标签: objective-c xcode xcode4.2 autorelease


【解决方案1】:

诊断错误会更容易,而不必猜测它发生的行号,但我认为问题是您使用错误实例变量作为错误传递这里:

30    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error];

这里也

49    [fm removeItemAtPath:[recordedTmpFile path] error:&error];

原因是,如果发生错误,setCategory:error: 中的现有值error 将被覆盖而不被释放,因此是潜在的泄漏。

【讨论】:

  • 出错的行是:30 [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error]; 32 [audioSession setActive:YES 错误: &error]; 49 [fm removeItemAtPath:[recordedTmpFile path] error:&error]; 108 录音机 = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error]; 142 AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile 错误:&error];
  • 解决方案... In .h --> NSError *__autoreleasing * error; in.m --> [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:error];
  • @Javi:这不是解决方案。您的实例变量将为零,因此不使用。如果这是您想要的,只需将 nil 直接传递给方法即可。
  • 这是这个问题的正确答案:stackoverflow.com/questions/6963538/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 2011-06-12
  • 2012-09-07
  • 2013-04-24
相关资源
最近更新 更多