c# - 如何在 c# Xamarin 中实现 ios 委托(delegate)/数据源模式?

标签 c# ios objective-c xamarin.ios xamarin

如何在 c# Xamarin 中实现与 iOS 用于表格 View 的“委托(delegate)”或“数据源”模式等效的模式?例如,我想要像这样的 View 类:

public class MyDataView : UIView
{
  public interface ISource
  {
    int NumberOfPages();
  }

  public ISource DataSource { get; set; }
}

但问题是当我使用如下代码从 MyViewController 调用它时:

this.myDataView.DataSource=new ViewSource(this)

public class ViewSource : MyDataView.ISource
{
  private readonly MyViewController parentController;

  public ViewSource(MyViewController parentController)
  {
    this.parentController=parentController;
  }
}

由于创建了循环引用,MyViewController 永远不会被垃圾回收。

这似乎是一个普遍的要求,那么人们使用什么设计呢?

我应该将 Source 设为弱引用吗?这是如何在 C# 中完成的?这不是很危险吗,因为调用者可能不知道它是一个弱引用?

最佳答案

我建议您使用 Profiler 来查看这是否真的是内存泄漏。如果您发现这确实是一个问题,您可以使用 WeakReference class 弱引用委托(delegate)。 ,它持有对对象的弱引用。

关于c# - 如何在 c# Xamarin 中实现 ios 委托(delegate)/数据源模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547121/

相关文章:

ios - <错误> : CGAffineTransformInvert: singular matrix on PhoneGap app

ios - Unix 时间戳在 ios 中始终关闭

objective-c - 为什么不调用 NSResponder 的键盘操作?

c# - 单点触控 : getting NSDictionary value

c# - 如何控制gridview中的列宽?

c# - 如何保存动态复选框更改

ios - 遇到 AutoLayout Xcode 约束问题

iphone - 手势问题

objective-c - Objective-C 中的泛型类型

c# - Fluent 和 NHibernate 的泛型