在Monotouch中使用新的NSAutoReleasePool()是否是一个好的行为?

时间:2011-03-14 10:04:46

标签: xamarin.ios

想知道:为了支持MT,将代码尽可能频繁地封装到NSAutoReleasePool()中是不是很好的设计/行为? 或者使用与ObjC相同的规则:如果循环大量数据,创建和处理许多对象或创建新线程时创建一个规则? 当NSAutoReleasePool的范围结束时,MT会立即释放内存,还是会在有时间的情况下释放内存?

1 个答案:

答案 0 :(得分:2)

我在MonoTouch中创建了相当大的应用程序,它们加载了大量数据(有些数据在几兆字节内多次),而且我根本不需要担心NSAutoReleasePool。一般情况下,MonoTouch垃圾收集器可以正常工作很好,并为您处理大部分工作。

有几次我自己运行GC.Collect()方法,所以我知道数据会立即发布,但这种情况很少发生。

这一切都取决于你如何设计你的应用程序。如果您使用的Apple框架的唯一部分是用于UI,则您不需要关心,因为它们将始终在主UI线程中创建/销毁,并自动分配NSAutoReleasePool。如果你在一个单独的线程中使用其他Apple框架,那么你需要有对象。