了解引擎盖下的Monotouch?

时间:2011-02-22 09:40:58

标签: 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));

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

要阅读一些更有趣的细节,请查看文档here。当我第一次开始使用MonoTouch时,我会阅读文档标题下的每个项目符号点,因为所有内容都非常有趣和深入。

您可能获得比stackoverflow更多答案的另一个资源是他们的IRC聊天。 Here是指向基于网络的版本的链接,如果您不想弄乱IRC。