2012-08-04 23 views
1

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

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

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

+0

这是您正在测试的实际代码还是模拟版本? – 2012-08-05 01:33:38

+0

这是从测试项目中解除的实际代码。 – fraserhess 2012-08-06 01:41:01

+0

我做了一个示例项目,但无法重现它:https://github.com/DouglasHeriot/WeakIvarTest你有什么不同吗? – DouglasHeriot 2012-08-06 02:09:18

回答

0

3人(包括我自己)现在已经证实这个工作在10.8上,但不在10.7.4上。