gpt4 book ai didi

ios - 如果我无法从另一个线程调用 UIKit,如何在 Dispose 中进行清理?

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

我的大部分 UIKit Dispose覆盖在它们被销毁之前对其他 View 做一些事情:

protected override void Dispose (bool disposing)
{
if (ScrollView != null) {
ScrollView.RemoveObserver (this, new NSString ("contentOffset"));
ScrollView.RemoveObserver (this, new NSString ("contentInset"));
ScrollView = null;
}

base.Dispose (disposing);
}

我最近才意识到 Dispose如果 disposing 将在终结器线程上运行是 false .
在这种情况下 ScrollView.RemoveObserver将从错误的非 UI 线程调用。

Dispose 中进行 UIKit 相关清理的安全方法是什么? ?

最佳答案

如果处置是false ,那么您最好不要调用该代码。

protected override void Dispose (bool disposing)
{
if (disposing)
{
if (ScrollView != null) {
ScrollView.RemoveObserver (this, new NSString ("contentOffset"));
ScrollView.RemoveObserver (this, new NSString ("contentInset"));
ScrollView = null;
}
}
base.Dispose (disposing);
}

作为对您的问题的更一般的答案-假设此代码在 UIViewController 中-在 ViewDidAppear、ViewDidDisappear 中附加/分离这些观察者可能会更好-然后您可以完全避免此问题。

关于ios - 如果我无法从另一个线程调用 UIKit,如何在 Dispose 中进行清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712949/

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