1

id __weak weakLayer;ARC プロジェクトでは、スーパーレイヤーによって保持される CALayer に__weak ivar (として宣言) を設定しています。ほとんどの場合、これでうまくいきます。弱い ivar が nil とテストされることがあります。問題を示すデバッグを簡単にするために、いくつかのテスト コードを作成しました。これは無限ループになると思いますが、通常は 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 に答える