gpt4 book ai didi

objective-c - 避免保留循环,NSNotificationCenter?

转载 作者:太空狗 更新时间:2023-10-30 03:48:15 25 4
gpt4 key购买 nike

这个类别方法是否允许我避免对 NSNotificationCenter 观察者的额外保留?

#import "NSNotificationCenter+Util.h"

@implementation NSNotificationCenter (Util)

- (void)addWeakObserver:(nonnull NSObject*)observer selector:(nonnull SEL)aSelector name:(nullable NSString *)aName object:(nullable id)anObject {
__weak NSObject *weakObserver = observer;
[self addObserver:weakObserver selector:aSelector name:aName object:anObject];
}

@end

目标是让对象消亡而不必将其移除。


注意:我正在努力避免这种情况导致保留周期:

Be sure to invoke removeObserver:name:object: before notificationObserver or any object specified in addObserver:selector:name:object: is deallocated.

最佳答案

NSNotificationCenter 不保留 observer,因此您不会仅使用 addObserver:selector:name:object: 创建保留周期.您不需要包装器方法。

关于调用 removeObserver:name:object: 的警告的原因是因为 NSNotificationCenter 在 OS X 10.11 (El Capitan) 和 iOS 之前没有使用归零弱引用9. 在这些版本之前的操作系统中,如果您在释放observer 时未能从通知中心删除observer,那么通知中心将继续尝试发送通知给观察者。这通常会导致崩溃或更糟。

如果您的部署目标至少是 OS X 10.11 或 iOS 9,那么您不必担心在释放时删除 observer

请注意,如果您使用 -[NSNotificationCenter -addObserverForName:object:queue:usingBlock:],那么我相信您确实需要担心避免由强烈保留观察者的 block 引起的保留周期.

关于objective-c - 避免保留循环,NSNotificationCenter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582279/

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