gpt4 book ai didi

iphone - 关于 ViewWillAppear 和 ViewWillDisapper 的 NSNotificationCenter

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:30:37 25 4
gpt4 key购买 nike

我有一个简单的 viewController,我想监听 UIKeyboardWillHideNotification。因此我有以下代码:

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden)
name:UIKeyboardWillHideNotification object:nil];
}

- (void) keyboardWillBeHidden
{
[self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
}

我正在尝试决定何时删除作为通知中心观察者的 viewController。当 View Controller 在屏幕上时,我只需要了解 UIKeyboardWillHideNotification,因此我正在考虑添加以下内容:

- (void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

这就足够了吗?当 viewController 仍在屏幕上时,是否有可能调用 viewDidUnloaddealloc 请注意,我使用的是非常基本的 UINavigationController 用于我的应用程序的流程。

最佳答案

viewWillAppear 中注册通知并在 viewWillDisappear 中取消注册对我来说似乎是一个干净且对称的解决方案。

请注意,viewWillAppear 可以在 dealloc 之前多次调用(例如,如果将另一个 View Controller 推送到您的 VC 上,或者如果您在标签栏 Controller 之间切换。)如果您在 viewWillAppear 中注册通知并仅在 dealloc 中取消注册然后您将获得重复注册(比较 Warning for iOS/iPhone users about duplicate NSNotification observations )并且已注册的选择器被多次调用以用于单个通知事件。

其实我更喜欢基于 block 的观察者注册方式

addObserverForName:object:queue:usingBlock:

返回一个不透明对象,用于再次移除观察者。将此返回值存储到 View Controller 的实例变量中有助于跟踪观察者是否已注册,因此有助于避免重复注册。

关于iphone - 关于 ViewWillAppear 和 ViewWillDisapper 的 NSNotificationCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721818/

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