gpt4 book ai didi

ios - 在 MonoTouch 中使用字典

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:49 25 4
gpt4 key购买 nike

我对 MonoTouch 字典的限制感到很困惑:http://docs.xamarin.com/ios/about/limitations#Value_types_as_Dictionary_Keys

我的理解是这样的代码是不允许的:

var foo = new Dictionary<int, int>();

但是我在书上看到这样的代码,这没有意义:

protected Dictionary<int, CustomCellController> _cellControllers = new Dictionary<int, CustomCellController>();

此外,有人发帖说,如果您使用可空类型,它会将值转换为引用,因此以下工作正常(只要键不为空):

var foo = new Dictionary<int?, int?>();

这也没有意义,因为可空类型是值类型的结构。

那么在设备上使用字典的真正规则是什么?

最佳答案

由于设备上不允许使用 JITin,因此所有代码都必须使用 AOT(提前)编译器进行编译。

My understanding that code like this is not allowed:

此限制是关于 AOT 编译器确定在运行时将使用什么的困难。这样的代码可能有效,您会在示例中看到这样的代码 - 但它也可能会失败,具体取决于您对代码的处理方式(创建 Dictionary 不是问题)。

So what are the real rules about using dictionaries on a device?

使用值类型意味着无法共享生成的代码(就像引用类型一样)。例如。使用通用 Dictionaryintlong需要单独的代码,而可以为 string 共享相同的代码和 CustomCellController .

寻找什么 Dictionary<int,int>需求不是问题(很清楚)。然而,事情往往在内部变得复杂,例如保障权利KeyValuePair生成。嵌套的泛型也很难正确。

这就是为什么第一个一般解决方法是尝试提示 AOT 编译器需要什么。如果 AOT 编译器可以找到需要它生成所需内容的代码,那么它将在运行时可用。

下一个解决方法是尝试使用引用类型(例如 string )而不是值类型(因为这种情况对于 AOT 编译器来说更容易处理)。

最后,AOT 编译器变得越来越好(通过每个版本)并且继续努力减少这个(和其他)限制。所以你在这里读到的内容可能在 3、6、12 个月后都不适用......

关于ios - 在 MonoTouch 中使用字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114488/

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