【问题标题】:Memory leaks class method内存泄漏类方法
【发布时间】:2014-02-20 07:31:56
【问题描述】:

我从下面的代码中收到了一堆内存泄漏...我试图以更好的方式重写它,但真的想不出其他任何东西。建议将不胜感激。下面是消息发送到的对象。

Packet *packet;
packet = [PacketAudioBuffer packetWithData:data];

PacketAudioBuffer.m 文件 ->

+ (id)packetWithData:(NSData *)data
{
   int totalSize = [data length];

   int packetNumber = [data pm_int32AtOffset:4];

   return [[self alloc] initWithAudioBufferData:data totalSize:totalSize packetNumber:packetNumber];
}

- (id)initWithAudioBufferData:(NSData *)data
                totalSize:(UInt32)totalSize
           packetNumber:(UInt32)packetNumber
{

if ((self = [super initWithType:PacketTypeAudioBuffer]))
{
       // this is where audioBufferData is set.
       self.audioBufferData = data;
       self.totalSize = totalSize;
       self.packetNumber = packetNumber;
}
return self;
}

【问题讨论】:

  • 调用packetWithData的负责发布结果。

标签: ios objective-c memory memory-leaks


【解决方案1】:

你能试试这个吗? . .

+ (id)packetWithData:(NSData *)data
{
   int totalSize = [data length];

   int packetNumber = [data pm_int32AtOffset:4];

   return [[[self alloc] initWithAudioBufferData:data totalSize:totalSize packetNumber:packetNumber] autorelease];
}

【讨论】:

    【解决方案2】:

    听起来您没有使用 ARC,因此从不是新的、分配、保留或复制的方法返回 alloc 的结果而不自动释放它是不正确的。在packetWithData:的return语句中添加autoreleased。

    另外,我建议您阅读内存管理指南。时间不长,而且这东西真的很基础。

    【讨论】:

      【解决方案3】:

      不需要你实现的类方法。尝试像这样简化:

      - (id)initWithAudioBufferData:(NSData *)data
      {
      
          if ((self = [super initWithType:PacketTypeAudioBuffer]))
          {
              // this is where audioBufferData is set.
              self.audioBufferData = data;
              self.totalSize = [data length];
              self.packetNumber = [data pm_int32AtOffset:4];
          }
          return self;
      }
      

      然后这样称呼它:

      PacketAudioBuffer *packet = [[PacketAudioBuffer alloc] initWithAudioBufferData:data];
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 2015-02-17
        • 2013-08-13
        • 2015-03-24
        • 2014-03-10
        • 1970-01-01
        相关资源
        最近更新 更多