我的任务是在iOS上移植Android应用。不幸的是,我之前从未编写过iOS应用程序,因此我有一些基本问题。

在Android中,我们编写的应用程序维护了一些不同的核心对象,这些对象在扩展android.app.Application的类中经常使用。当需要访问这些对象时,我们将其称为getApplication();。在此类中,我们存储了两个自定义对象的Dictionary,一个ArrayList和一些布尔值,整数和字符串。

谁能告诉我在iOS中执行此操作的正确方法?我查看了一个包含所有字典,数组列表和其他数据的单例类,但是我读到该单例将在应用程序运行的整个过程中存在于内存中。在Android中,有时会在不 Activity 一段时间后对Application类进行垃圾回收,因此我们必须重新加载它。如果在iOS中,此单例类在应用程序的整个生命周期中都存在内存中,我是否会担心使用过多的内存?是否应该序列化这些对象并将它们存储在磁盘上,并在需要时重新创建它们?

最佳答案

android.app.Application听起来类似于iOS的App Delegate(UIApplicationDelegate)。当应用程序状态更改时,将调用App Delegate中的某些方法,请检查以下方法:

- (void)applicationWillTerminate:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;

当应用程序不在后台并且将要关闭时,第一个将被调用(请参见Tommy的评论),如果应用程序进入后台,则将调用第一个。如果有更改,我建议每次应用程序进入后台时,将数据序列化到永久存储。

稍后,您可以通过调用[[UIApplication sharedApplication] delegate]并将结果强制转换为自定义子类来获得对自定义应用程序委托的引用。我还建议不要将数据直接存储在App Delegate中,而是存储在该委托具有引用的模型对象中(这应该使事情保持整洁,并为您提供更多的灵活性)。

09-18 08:58