0

我有一个测试项目可以在多个视图控制器上使用私有数据对象。(我已经从 web 和 git-hub 下载了它)

- (ExampleAppDataObject*) theAppDataObject;
{
    id<AppDelegateProtocol> theDelegate = (id<AppDelegateProtocol>) [UIApplication sharedApplication].delegate;
    ExampleAppDataObject* theDataObject;
    theDataObject = (ExampleAppDataObject*) theDelegate.theAppDataObject;
    return theDataObject;
}

第一个问题是,theDelegate 是用 AppDelegateProtocol 强制转换的,即使这个应用程序的 UIApplication 委托名称是 ViewControllerDataSharingAppDelegate,也没有任何警告。我无法理解为什么,也许是因为那是一个 id 类型?(AppDelegateProtocol 是他在 AppDelegate 中声明的自定义委托协议。)

其次,它在每个视图控制器上都显示了这种代码,看起来就像一个单例模式。我不认为这不是在视图控制器之间传输数据的最佳方式。传输对象数据类型的最佳方式是什么?

谢谢。

4

1 回答 1

1

创建协议在某种程度上将代码与特定实现分离。您可以想象有多个应用程序,每个应用程序都使用自己的自定义类作为应用程序委托,但所有实现都符合 AppDelegateProtocol。

当我第一次开始使用 iOS 时,我经常使用应用程序委托来保存全局数据和方法。

但是,这会使用特定于应用程序的代码填充您的应用程序委托。

我最近放弃了这种方法,并使用了数据容器单例(也许还有一个实用方法单例)。作为单例的典型方法,我定义了一个类方法,让我可以获取单例。我根据需要向我的单例添加属性以存储数据,然后只使用类方法获取指向单例的指针。我编写了我的类方法来延迟加载单例。

通过使其符合 NSCoding 也很容易使您的数据容器单例持久化。然后每次你被移到后台时,只需将你的单例保存在某个地方。在应用程序启动时,阅读它。

于 2013-09-12T18:42:22.933 回答