设置弱ivar并获得nil

时间:2012-08-04 20:37:56

标签: cocoa core-animation automatic-ref-counting

在ARC项目中,我将__weak ivar(声明为id __weak weakLayer;)设置为CALayer,该CALayer由其超级层保留。大多数时候这都有效。有时,弱ivar测试为零。我写了一些测试代码来简化调试,以演示问题。我希望这是一个无限循环,但它通常在不到20次迭代中爆发。爆发所需的迭代次数不一致。

array = [NSMutableArray array];
while (1) {
  CALayer *layer = [CALayer layer];
  [array addObject:layer];
  weakLayer = layer;
  if (!weakLayer) {
    NSLog (@"nil");
    break;
  }
  NSLog(@"not nil");
}

如果我在po weakLayer内放置一个if的动作断点,它会打印一个有效的对象。我已经使用Lion和Mountain Lion SDK在Xcode 4.3.3和4.4上进行了测试。

1 个答案:

答案 0 :(得分:0)

3人(包括我自己)现在确认这个在10.8上有效,但在10.7.4上没有。