gpt4 book ai didi

ios - NSNotificationCenter 使用了多少内存

转载 作者:行者123 更新时间:2023-12-01 17:39:24 27 4
gpt4 key购买 nike

当我使用一个时,内存/处理的用途是什么:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismissKeyboard) name:UIKeyboardWillHideNotification object:nil];

或者:

NSNotificationCenter * notificationCenter = 
[notificationCenter addObserver:self selector:@selector(dismissKeyboard) name:UIKeyboardWillHideNotification object:nil];

PS:我想将 NSNotificationCenter 用于三个不同的事情。所以我的好奇心

最佳答案

你的问题有点不清楚。如果你的意思是“调用 [NSNotificationCenter defaultCenter] 需要多少时间?”,不用担心。这是微不足道的。通常人们将 [NSNotificationCenter defaultCenter] 卸载到变量中以节省输入。我通常将变量称为 nc,因为它太长了。这个答案的其余部分与 NSNotification 性能有关,这可能不是您要问的。

Cocoa 通常不会对这些事情做出 promise 。您不能依赖实现细节,不幸的是,CFNotificationCenter 不是 Core Foundation 开源版本的一部分,因此您无法四处查看它当前是如何实现的。

但经验表明(基于我几年前必须进行的性能调整)它是作为一系列观察结果实现的。所以它存储观察者、选择器、名称和对象,这需要大约 4x(指针大小)的内存加上可能的 ObjC 结构开销。因此在 64 位平台上可能有 20 多个字节等。

addObserverremoveObserver 大致相当于在 NSMutableArray 中添加或删除条目的成本(特别是,removeObserver 是在中心注册的观察总数的 O(n))。在中心注册的观察总数上发布通知的时间复杂度为 O(n)。 (同样,这是基于逆向工程;它可能会随着时间的推移而改变,但我对此深表怀疑。我确信现在这是非常稳定的代码。)

这意味着 NSNotification 不能很好地扩展到数千个观察值。这并不是建议您“出于性能原因避免使用 NSNotification”。 (我讨厌人们在没有实际验证他们的情况的情况下说这样的话。)这只是意味着您需要在系统中创建数百或数千个通知之前考虑周到。这就是 KVO 专门为此设计的。

对于您的特定示例,这正是 NSNotification 的设计目的,因此您应该使用它。

关于ios - NSNotificationCenter 使用了多少内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280949/

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