【问题标题】:Memory leak message on initialization初始化时的内存泄漏消息
【发布时间】:2012-04-18 13:44:42
【问题描述】:

我收到一条罕见的消息,发生了什么事?

定义:

@property(nonatomic, retain) SoundPlayer* soundPlayer;

代码:

SoundPlayer *soundPlayerTemp = [[SoundPlayer alloc] init];
self.soundPlayer = soundPlayerTemp;
[soundPlayerTemp release];

消息:

Potential leak of an object allocated on line

【问题讨论】:

  • 你能发布你的 SoundPlayer 代码吗?

标签: objective-c memory-leaks


【解决方案1】:

静态分析器充满误报;您的代码没有任何问题。您可以更简洁地摆脱以下信息:

self.soundPlayer = [[[SoundPlayer alloc] init] autorelease];

或者通过切换到 ARC,这也是一个很好的选择。

【讨论】:

  • @Daniel 自动引用计数,基本上是 IOS5(以及一些更高版本的 4.x)的自动保留/释放
  • 静态分析器不会在原始代码位中标记内存泄漏。一定有其他事情发生。
  • 其实其他的可能是dealloc中没有释放该属性。
  • @Daniel 你能发布你对dealloc的实现吗?
【解决方案2】:

问题的最可能原因是您没有在 dealloc 方法中释放该属性。你应该有类似的东西:

-(void) dealloc
{
    self.soundPlayer = nil;
    [super dealloc];
}

或者,如果您已经显式声明了一个实例变量来支持该属性,那么推荐的代码是

-(void) dealloc
{
    [soundPlayer release];
    [super dealloc];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2013-08-12
    • 1970-01-01
    • 2013-11-20
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多