【问题标题】:Are all weak references nilled if we enable zombie object?如果我们启用僵尸对象,所有弱引用都会被取消吗?
【发布时间】:2013-12-06 07:42:52
【问题描述】:

通常,如果一个对象被释放,所有弱引用都会被清零。

如果我们启用僵尸对象呢?

产品 -> 编辑方案 -> 启用僵尸对象

弱引用也会被取消吗?

否则,在正常情况下不会发生的错误会在启用僵尸对象上发生

正如其中一个答案所说,我强烈怀疑弱引用将被取消。

话虽如此,

How to fix the bug where viewDidScroll is called when UIViewController is already gone? 并在那里回答,否则建议。

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    即使您启用 Zombie Objects,弱引用也会设置为 nil

    我是这样测试的:

    id __weak o;
    @autoreleasepool {
        id ob = [[NSObject alloc] init];
        o = ob;
        NSLog(@"Weak ref before release %@", o);
    }
    NSLog(@"Weak ref after release %@", o);
    

    无论是否启用 Zombies,都会发生相同的输出:

    2013-12-05 23:55:35.571 WeakPointers[93840:303] 发布前的弱参考 2013-12-05 23:55:35.572 WeakPointers[93840:303] 释放后的弱参考(空)

    【讨论】:

    • 我就是这么想的。然而这个错误,所有答案都暗示stackoverflow.com/questions/20418572/…
    • @JimThio:UIScrollViewdelegate 属性并不弱。声明为@property(nonatomic, assign),“assign”与“unsafe_unretained”相同。所以它不会自动取消。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2019-03-15
    • 2020-04-30
    相关资源
    最近更新 更多