Xamarin.ios MonoTouch如何收集垃圾?

Xamarin.ios MonoTouch如何收集垃圾?,xamarin.ios,Xamarin.ios,MonoTouch垃圾收集的详细信息是否在任何地方发布?我很想知道它在iPhone上是如何工作的。我想知道: 它运行的频率,以及是否存在任何可能阻止它运行的约束。 它是否是完全线程安全的,因此从一个线程传递到另一个线程的对象是否得到了正确的处理,当然,如果存在我们应该注意的约束的话。 如果在启动将使用内存的操作之前手动调用垃圾收集器有任何好处。 它如何处理内存不足通知和内存不足 这些信息将帮助我们了解应用程序日志中的堆栈和线程信息 [编辑]我现在在站点上找到了这些信息,但这些信息非常通用,并列出

MonoTouch垃圾收集的详细信息是否在任何地方发布?我很想知道它在iPhone上是如何工作的。我想知道:
  • 它运行的频率,以及是否存在任何可能阻止它运行的约束。
  • 它是否是完全线程安全的,因此从一个线程传递到另一个线程的对象是否得到了正确的处理,当然,如果存在我们应该注意的约束的话。
  • 如果在启动将使用内存的操作之前手动调用垃圾收集器有任何好处。
  • 它如何处理内存不足通知和内存不足

    这些信息将帮助我们了解应用程序日志中的堆栈和线程信息


    [编辑]我现在在站点上找到了这些信息,但这些信息非常通用,并列出了实现者的各种选项和选择,包括如何处理线程。具体的MonoTouch信息正是我想要的。

    垃圾收集器与Mono中使用的垃圾收集器相同,源代码如下:

    它是完全线程安全的,并且是多核安全的,这意味着多个线程可以分配对象,并且可以在多个线程存在时进行垃圾收集

    话虽如此,您的问题还是有点棘手,因为当您说“所以从一个线程传递到另一个线程的对象是被处理的属性,比如是否存在应该注意的约束”时,您并不是在真正询问垃圾收集器

    这实际上不是一个垃圾收集器问题,而是一个API问题。这在很大程度上取决于您调用的API。这些规则与.NET的规则相同:实例方法从来都不是线程安全的,静态方法在默认情况下是线程安全的。除非API中明确说明它们不是

    现在有了UIKit或CoreGraphics等UI API,它们与世界上任何其他可用的GUI工具包都没有什么不同。UI工具包不是线程安全的,因此不能假设在主线程上创建的UILabel可以从线程安全访问。这就是为什么必须在NSObject上调用“BeginInvokeMainThread”,以确保在UIKit对象上调用的任何方法只在主线程上执行

    这只是一个例子

    查看更多信息


    内存不足通知由操作系统发送到UIViewController,而不是Mono的GC,因此在这种情况下,您需要采取适当的措施。

    不过,现在需要研究第二代GC。