【问题标题】:NSMutableArray getting freed on iPad but not in SimulatorNSMutableArray 在 iPad 上被释放,但在模拟器中没有
【发布时间】:2012-11-02 21:23:22
【问题描述】:

我在 .m 代码中有以下代码

@implementation MyGameController
{
    NSMutableArray* viewsarray;
}

我是这样初始化的

- (void)viewDidLoad
{
   viewsarray = [[NSMutableArray alloc] init];
   for (int i=0; i < TOTAL_ITEMS; i++)
   {
        ItemController* iv = [[ItemController alloc] initWithNibName:@"ItemPadXib" bundle:nil];

        [viewsarray addObject:iv];
    }
}

当我在这个函数的末尾检查时 - 数组是完整的并且包含我所有的项目。但是,后来它被释放(我认为)并且 viewsarray 被设置为 nil。

我知道这一点,因为后来我尝试像这样访问它

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    ItemController* iv1 = [viewsarray objectAtIndex:index];
    ....
}

当我在此函数中设置 bp 时 - viewsarraynil

我尝试将viewsarray 声明为property,但行为相同

一件重要的事情 - 在模拟器上它工作得很好。有什么不同吗 ? ARC 的行为是否不同?

【问题讨论】:

  • 尝试从 NSMutableArray 派生你自己的类,看看何时在这个派生类中调用 dealloc。
  • 感谢易软。马上试试
  • 很难从NSMutableArray派生出来(NSArray是一个类簇)。设置关联对象并观察其销毁可能更容易。

标签: ios ipad ios-simulator automatic-ref-counting


【解决方案1】:

viewsarray 实例变量很强大(默认情况下),因此无法自动释放。内存管理(由 ARC)在模拟器和设备上是相同的。你的错误在别处。

【讨论】:

  • @LouisShraga 不,这是对您的问题“ARC 的行为是否不同?”的回答。
  • cmon,显然我的问题不是关于 ARC,而是关于我的错误。 “ARC 的行为是否不同”是一个想法,一个想法。 “有什么不同”是个问题。如果我只是想知道 ARC 在设备上的行为是否不同,我会问一个简短的问题......这甚至不是一个有效的问题......请一些常识
  • 在您的问题中没有暗示您的错误的可能原因。这就是我试图用我的回答来阐明的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2013-05-24
  • 2011-05-10
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多