了解引擎盖下的Monotouch?

Kru*_*lur 5 xamarin.ios

我读了很多关于MT是如何工作的,它与iOS的API绑定,它使用AOT编译,iPhone上没有.NET运行时等等.

Geoff曾在我的一个问题的答案中写到这一点,该问题展示了如何绑定ObjC选择器:

var url = new NSUrl ("http://www.google.com/");
var str = (NSString) Runtime.GetNSObject (Messaging.IntPtr_objc_msgSend_IntPtr (Class.GetHandle ("NSString"), Selector.GetHandle ("stringWithContentsOfURL:"), url.Handle));
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,会发生什么?这是否意味着如果我使用已绑定的调用,它将在后台执行类似上面代码的操作,将其隐藏起来?这是否意味着每次执行一些Selector.GetHandle()和Runtime.GetNSObject()?

整个MT项目是如何启动的?在某些时候,团队一定在那里思考,"我们在这里有ObjC,Mono在那里 - 我们如何将它们结合起来?" 我的意思是,尝试过的第一件事是什么?

关于垃圾收集器的最后一件事:我假设它必须在一个单独的线程中运行 - 但它真的是一个三分之一吗?还是有几个?GC收集器如何确定是时候清理了?

jon*_*ers 2

MonoTouch 所做的很多事情正是 Mono 在其他操作系统上所做的。

他们从 .Net BCL 的一个子集:Silverlight 开始,还在 iPhone 上绑定了 Objective-C api。他们可能还创建了 AOT 编译选项,因为我认为这是第一个需要它的情况。Apple 要求(或强烈希望)没有人会抽象或在其 API 之上放置一层。到目前为止,MonoTouch 是唯一成功实现这一目标并为 iPhone 带来新语言的框架。

要阅读一些更有趣的详细信息,请查看此处的文档。当我第一次开始使用 MonoTouch 时,我阅读了文档标题下的每个要点,因为所有要点都非常有趣且深入。

您可能会比 stackoverflow 获得更多答案的另一个资源是他们的 IRC 聊天。 如果您不想打扰 IRC,这里有一个基于网络版本的链接。