【问题标题】:Incorrect decrement of the reference count引用计数的不正确递减
【发布时间】:2010-06-07 22:04:55
【问题描述】:

我有以下问题:在一个执行流程中我使用 alloc,而在另一个流程中,不需要 alloc。 在 if 语句的末尾,无论如何,我都会释放对象。 当我执行“构建和分析”时,我收到一个错误:“调用者不拥有对象的引用计数的错误递减”。

如何解决?

UIImage *image; 

int RandomIndex = arc4random() % 10;

if (RandomIndex<5) 
{
    image = [[UIImage alloc] initWithContentsOfFile:@"dd"];
}
else 
{
    image = [UIImage imageNamed:@"dd"];
}


UIImageView *imageLabel =[[UIImageView alloc] initWithImage:image];
[image release];
[imageLabel release];

【问题讨论】:

    标签: iphone objective-c ios memory-management


    【解决方案1】:

    你应该retain第二个条件中的图片:

    image = [[UIImage imageNamed:@"dd"] retain];
    

    从您的角度来看,这样,两个可能的退出条件都会有一个引用计数为 1 的对象。

    否则,您正在尝试 release 一个已经 autoreleased 的对象!

    【讨论】:

      【解决方案2】:

      您可以按照其他人的建议去做,或者:

      if (RandomIndex<5) 
      {
          image = [UIImage imageWithContentsOfFile:@"dd"];
      }
      else 
      {
          image = [UIImage imageNamed:@"dd"];
      }
      
      UIImageView *imageLabel =[[UIImageView alloc] initWithImage:image];
      ...
      [imageLabel release];
      

      这样,在这两种情况下,您都会得到一个自动释放的对象image,然后您就不需要自己释放它了。

      【讨论】:

        【解决方案3】:

        代替:

        image = [UIImage imageNamed:@"dd"];
        

        做:

        image = [[UIImage imageNamed:@"dd"] retain];
        

        【讨论】:

        • 或者另一种方式,将分配的设置为自动释放。
        【解决方案4】:

        imageNamed 返回一个 autoreleased 对象。 您只能释放您拥有所有权的对象。

        这将起作用:

        if (RandomIndex<5) 
        {
            image = [[UIImage alloc] initWithContentsOfFile:@"dd"] autorelease];
        }
        else 
        {
            image = [UIImage imageNamed:@"dd"];
        }
        
        
        UIImageView *imageLabel =[[UIImageView alloc] initWithImage:image];
        [imageLabel release];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-10
          • 2012-05-21
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多