【发布时间】:2015-02-01 13:20:55
【问题描述】:
我有一个 Xamarin.iOS Classic 项目并将其迁移到统一 API。
我的代码中有一个视图控制器(简化版):
public class TestViewController : UIViewController
{
private WeakReference<UIView> _viewRef;
public override void ViewDidLoad()
{
base.ViewDidLoad();
_viewRef = new WeakReference<UIView>(View);
StartTimer();
}
private async void StartTimer()
{
await Task.Delay(1000);
// _viewRef is not alive here
}
}
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
UIWindow _window;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
_window = new UIWindow(UIScreen.MainScreen.Bounds);
var testController = new TestViewController();
_window.RootViewController = testController;
_window.MakeKeyAndVisible();
return true;
}
}
这里的奇怪行为是 _viewRef 弱引用变得不活跃。所以看起来视图控制器的托管视图实例被垃圾收集了。尽管如此,我可以毫无问题地使用 UIViewController.View 属性访问 UIView。
Classic API 项目没有这个问题。我想这里的差异是由统一 API 使用 Xamarin 的 new Refcount 引起的。
真正奇怪的是,然后我从空白开始一个统一API项目,问题也无法重现。
什么会导致这种行为?
【问题讨论】:
标签: xamarin.ios xamarin reference-counting