gpt4 book ai didi

ios - 需要调用 removeObserver 两次

转载 作者:行者123 更新时间:2023-11-28 19:59:43 26 4
gpt4 key购买 nike

我有一个 View 可以像这样在 init 上观察自身的值:

[self addObserver:self forKeyPath:@"focusPointOfInterestIndicator" options:0 context:kSRCameraViewObserverContext];
[self addObserver:self forKeyPath:@"exposurePointOfInterestIndicator" options:0 context:kSRCameraViewObserverContext];
[self addObserver:self forKeyPath:@"paused" options:0 context:kSRCameraViewObserverContext];
[self addObserver:self forKeyPath:@"previewLayerGravity" options:0 context:kSRCameraViewObserverContext];

并且在 dealloc 上,观察者被移除,因为它们应该是这样的:

[self removeObserver:self forKeyPath:@"focusPointOfInterestIndicator"];
[self removeObserver:self forKeyPath:@"exposurePointOfInterestIndicator"];
[self removeObserver:self forKeyPath:@"paused"];
[self removeObserver:self forKeyPath:@"previewLayerGravity"];

但是除非调用它两次(有或没有上下文,都不会改变任何东西),当 View 被释放时我会崩溃,因为值仍然被观察到。但我很确定观察者只添加一次(因为它在对象的初始化中)。

我只是想知道为什么它可以被注册两次?还是通过调用它两次,让对象有效地移除观察者?如果有人有任何线索?

最佳答案

initNSObjetprimary initializer 这意味着 init 必须在 Apple 的 initWithCoder 实现中调用/initWithFrame 类似[super init];

所以你的sharedSetup被调用了两次

编辑(感谢 And Ainu):

更具体地说,就是UIViewinit方法调用了initWithFrame方法。

关于ios - 需要调用 removeObserver 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com