gpt4 book ai didi

xamarin.ios - MonoTouch垃圾如何收集?

转载 作者:行者123 更新时间:2023-12-04 18:14:48 25 4
gpt4 key购买 nike

MonoTouch垃圾回收的详细信息是否在任何地方发布?我有兴趣知道它在iPhone上如何工作。我想知道:

  • 它多久运行一次,是否有任何限制条件使其停止运行。
  • 是否完全是线程安全的,所以从一个线程传递到另一个线程的对象将得到正确处理,如果存在约束,我们应该意识到。
  • 如果在启动将使用内存的操作之前手动调用垃圾回收器有任何好处。
  • 它如何处理内存不足通知,并且内存不足。

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

    [编辑]我现在在Hans Boehm's站点上找到了该信息,但这非常通用,并列出了实现者具有的各种选项和选择,包括如何处理线程。我在这里想要特定的MonoTouch信息。
  • 最佳答案

    垃圾收集器与Mono中使用的垃圾收集器相同,源代码在这里:

    https://github.com/mono/mono/tree/master/libgc

    它是完全线程安全的,也是多核安全的,这意味着多个线程可以分配对象,并且可以在存在多个线程的情况下进行垃圾回收。

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

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

    现在,使用UIKit或CoreGraphics之类的UI API,这些与世界上任何其他GUI工具包都没有什么不同。 UI工具包不是线程安全的,因此不能假定可以安全地从线程访问在主线程上创建的UILabel。这就是为什么必须在NSObject上调用“BeginInvokeOnMainThread”以确保在UIKit对象上调用的任何方法仅在不执行主线程的情况下执行的原因。

    那只是一个例子。

    检查http://monotouch.net/Documentation/Threading以获取更多信息

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

    关于xamarin.ios - MonoTouch垃圾如何收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742647/

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