【问题标题】:Memory Leak - NSString & NSURL内存泄漏 - NSString & NSURL
【发布时间】:2012-10-29 20:55:07
【问题描述】:
@property ( nonatomic, strong ) NSURL * urlPath;

self.urlPath = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bark" ofType:@"caf"]];

运行 ARC,部署目标 4.3。 Instruments 在 self.urlPath = line 上给出了泄漏。

self.urlPath 稍后会在视图出现后用于设置 AVSoundPlayer。现在声音播放器上没有显示泄漏,仅在此 NSURL 行上。音频播放,但是当视图被弹出时会发生内存泄漏。

我在这方面的任何想法 > 12 小时现在......

【问题讨论】:

  • 尝试使用URLForResource:withExtension:方法而不是pathForResource:,播放器也可能会泄漏。
  • 所有 iOS SDK 版本都有泄漏吗?
  • 您为什么使用URLWithString:?您通常使用fileURLWithPath: 将文件路径转换为NSURL 实例。不确定这是否与您的泄漏有关,但值得一看。
  • 我已将 setupSound 方法更改为: - ( void ) setupSound { NSURL * urlPath = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bark" ofType:@"caf"] ]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlPath error:nil]; [self.player setVolume:0.5f];但是我现在在 NSURL 行上得到了 100% 的泄漏。音频播放器的属性是这样的:@property (nonatomic, strong) AVAudioPlayer * player;我必须使用 4.3 部署目标并且我正在使用 ARC
  • 另外,别忘了致电[super viewDidAppear:animated][super viewWillDisappear:animated]

标签: ios nsstring avaudioplayer memory-leaks nsurl


【解决方案1】:

似乎只有 iOS 6 中的 Core Foundation 存在内存泄漏。

因此作为错误提交:

错误 ID# 12699818。

【讨论】:

    【解决方案2】:

    您的播放器正在泄漏,如果您的播放器泄漏,每个播放器也会保留其 URL 和字符串对象。

    self.player = [[[AVAudioPlayer alloc] initWithContentsOfURL:pingURL error:nil] autorelease];
    

    如果您将player 声明为保留属性,那么

    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:pingURL error:nil];
    

    将引用计数保留为 2。

    self.player = nil;
    

    将使其成为 1。

    【讨论】:

    • 我的播放器被声明为:@property (nonatomic, strong) AVAudioPlayer * player;
    • 我必须支持 iOS 4.3,所以我不能在属性声明中使用 'weak' - 还有什么我应该做的吗?我很困惑为什么在一次分配之后保留计数为 2...
    • @iOSProgrammingIsFun 使用assign 而不是weak — 但要小心,因为当对象被释放时,指针不会自动设置为nil。但是,您确定不想要更正确地处理的strong 引用吗?
    • strong 在那里没问题,这不是弧的问题@jimpic 没有考虑弧......计数到 0 就好了。 ——拆分你的线路怎么样?更好地定位问题
    • 如果我拆分线路,NSString 得到 33% 的泄漏,而 NSURL 得到 66%。 'assign'、'retain'、'strong'、'unsafe_unretained' 或任何组合都没有区别。
    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多