0

我已经在ViewControllerViewDidLoad中初始化了一个委托对象,但是当我再次加载它时,它再次初始化了该值。

我在该委托对象中保存了某种数组,我想使用getObjectand访问它setObject。我应该怎么做才能使委托对象不会在每次ViewDidLoad调用时都重新初始化?

4

4 回答 4

1

您是否考虑过这种策略:

  • 在您的应用程序启动后,在该特定对象被初始化和使用之前,将其设置为 nil。
  • 当你的应用第一次尝试使用它时,检查它是否仍然为 nil(它应该是第一次),然后初始化它并使用它
  • 在应用程序的剩余生命周期中,每当您的应用程序再次运行 viewDidLoad 方法时,始终检查该对象是否为 nil(此时不应为 nil)。这将节省您的应用程序尝试初始化已初始化对象的时间和精力。

但是,当您使用此策略时,您应该意识到特定对象的值应该在您的应用程序的整个生命周期中保持不变。否则它将无法正常工作。

于 2011-02-07T08:54:03.907 回答
0

您应该只在 viewDidLoad 中初始化 UI 元素。其他一切都应该在构造函数中初始化(initWith...)

于 2011-02-07T08:41:17.207 回答
0

如果你想要某个事情只做一次的地方,那通常是在某处的 Singleton 中——一个被制作一次并从所有地方引用的对象。

AppDelegate 是您免费获得的默认单例。但是,如果您在一段时间后决定 AppDelegate 中的内容过多,则最好制作不同的 Singleton 对象来放入自定义数据。

既然您知道要查找的术语,那么到处都有很多示例展示了如何制作 Singleton。

于 2011-02-07T09:29:44.137 回答
0

正如其他人所说,您可能需要一个单例对象。最简单的方法是这样的:

// interface

@interface MyViewController
{ ... }

+(DelegateType*) theDelegate;

...

@end

// implementation

@implementation MyViewController

+(DelegateType*) theDelegate
{
    static DelegateType* theDelegate = nil;

    if (theDelegate == nil)
    {
        theDelegate = [[DelegateType alloc] init];
    }
    return theDelegate;
}

@end

// To use it 

    [foo setDelegate: [MyViewController theDelegate]];
于 2011-02-07T10:19:58.900 回答