1

在 ARC 项目中,我将 __weak ivar(声明为id __weak weakLayer;)设置为 CALayer,该 CALayer 由其超级层保留。大多数时候这有效。有时,weak 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 上进行了测试。

4

1 回答 1

0

3 个人(包括我自己)现在已经确认这适用于 10.8,但不适用于 10.7.4。

于 2012-08-06T23:28:39.457 回答